计算机算法设计与分析基础(第七章时空权衡)
算法-时空权衡

时空权衡基于“空间充裕廉价,时间宝贵”以及“空间极其有限,时间要求不高”的思想,要么以牺牲空间的代价换取时间的高效,要么以牺牲时间的代价换取空间的要求。
前者在桌面PC领域更加常见,后者在单片机、嵌入式等产品中体现较明显。
典型的例子:计数排序:使用一个数组来存储比元素大或者小的元素个数,根据这些值来确定元素在最终列表中的位置。
计数排序法是一种简单的排序方法,这种排序算法对一个待排序的数组进行排序,并将排序结果放到另一个新的数组中。
计数排序算法针对待排序数组中的每个记录,扫描待排序的数组一趟,统计待排序数组中有多少个记录的值比该记录的值小。
假设针对某一个记录,统计出的计数值为c,那么,这个记录在新的有序数组中的合适的存放位置即为c。
假设有三个数组:数组A:待排序数组(非空,数据个数n)数组B:排序后的数组数组count:纪录A中某个数据在表B中的位置,初始值为0对于A中某个数据Xi(0<=i<n),与表中各个数据Xj(0<=i<n)进行比较,记录下比Xi 小的值的个数到count[i]。
但是,我们发现,数据与自身的比较是多余的,而且当Xi与Xj比较后,就没有必要再比较Xj和Xi了。
在此基础上我们对之前的操作方式进行一些变化。
我们对A中的数据Xi与Xj进行比较,所不同的是Xj的j的范围为i<j<=n ,即每个Xi只和其后的数据进行比较。
在比较过程中,如果Xi > Xj ,则count[i] = count[i]+1;否则,count[j]=count[j]+1 。
当算法完毕的时候,count数组中就记录了A中的各个数据在B中的实际位置。
算法过程如下所示:n 0 1 2 3 /*数组的索引位置*/A 21 32 17 21 /*数组中的数据*/C [0] [0] [0] [0] /*count的初始值*/算法开始i=0,j取值{1 ,2,3}。
(1)X0<X1 ,所以count[1]+1n 0 1 2 3 /*数组的索引位置*/A 21 32 17 21 /*数组中的数据*/C [0] [1] [0] [0] /*count的值*/(2)X0>X2 ,所以count[0]+1n 0 1 2 3 /*数组的索引位置*/A 21 32 17 21 /*数组中的数据*/C [1] [1] [0] [0] /*count的值*/(3)X0=X3 ,所以count[3]+1n 0 1 2 3 /*数组的索引位置*/A 21 32 17 21 /*数组中的数据*/C [1] [1] [0] [1] /*count的值*/接下来i=1 ,j取值{2,3}…….如此继续直至算法完毕,则n 0 1 2 3 /*数组的索引位置*/A 21 32 17 21 /*数组中的数据*/C [1] [3] [0] [2] /*count的初始值*/接下来的要做的只是按count中的值将A中的数据放到B中相应的位置上了,即B[count[i]] = A[i],则数组B中数据为B [17] [21] [21] [32]至此计数排序算法完成。
算法设计和分析课件

图算法在社交网络分析中的应用
VS
机器学习算法能够实现精准推荐,提高推荐系统的准确性和用户体验。
详细描述
机器学习算法在推荐系统中应用广泛,能够根据用户的历史行为和偏好进行个性化推荐。协同过滤、基于内容的推荐等机器学习算法通过分析用户行为和属性信息,挖掘用户的兴趣点和需求,实现精准推荐。这些算法能够提高推荐系统的准确性和用户体验,促进用户参与度和满意度提升。
动态规划
组合优化、约束满足问题等都是回溯算法的典型应用。
回溯算法的核心思想是穷举所有可能的解,并在搜索过程中剪枝,以避免不必要的搜索。
回溯算法的空间复杂度通常与问题的规模成正比。
回溯算法可以获得最优解,但在最坏情况下的时间复杂度可能很高,因为需要穷举所有可能的解。
回溯算法是一种通过穷举所有可能的解来求解问题的算法设计方法。
时间优化
通过将问题分解为子问题并存储子问题的解,避免重复计算,提高算法效率。
动态规划
数据结构优化
并行计算和分布式计算
任务划分
将大任务划分为多个小任务,并在多个处理器或计算机上并行执行,可以大大提高算法效率。
负载均衡
通过合理分配任务负载,确保每个处理器或计算机的工作量均衡,避免出现空闲或等待的情况,提高算法效率。
图算法在社交网络分析中的应用
总结词
图算法在社交网络分析中具有广泛的应用前景。
详细描述
随着社交网络的快速发展和普及,社交网络分析成为了一个重要的研究领域。图算法作为社交网络分析的重要工具之一,具有广泛的应用前景。未来随着技术的进步和应用需求的增长,图算法在社交网络分析中的应用将更加广泛和深入,为社交网络的发展和应用提供更多可能性。
详细描述
在处理大规模数据时,排序算法的内存占用和可扩展性也是需要考虑的重要因素。一些排序算法在处理大规模数据时可能会占用大量内存,导致内存不足的问题。因此,在实际应用中,需要根据数据规模和内存限制选择合适的排序算法,并考虑算法的可扩展性,以确保大数据处理的效率和准确性。
算法分析与设计知识点

算法分析与设计知识点算法是计算机科学中非常重要的一个概念,它是解决问题的有效方法和步骤的描述。
在实际的软件开发过程中,算法的设计和分析是必不可少的环节。
本文将介绍一些算法分析与设计的知识点,帮助读者更好地理解和运用算法。
一、算法分析的重要性在计算机科学中,算法的分析是一项关键任务。
通过对算法进行深入分析,我们可以评估其效率和性能,并选择最优算法来解决特定问题。
算法分析的重要性体现在以下几个方面:1. 时间复杂度:算法的时间复杂度描述了算法在输入规模增大时所需要的时间。
通过对算法的时间复杂度进行分析,我们可以预估算法的运行时间,从而选择更加高效的算法。
2. 空间复杂度:算法的空间复杂度描述了算法在运行过程中所需要的额外空间。
通过对算法的空间复杂度进行分析,我们可以评估算法对内存的消耗,避免出现内存溢出等问题。
3. 算法效率:通过算法分析,我们可以比较不同算法的效率和性能,选择合适的算法来解决问题。
高效的算法可以减少计算时间和资源消耗,提高程序的运行速度。
4. 问题复杂度:算法分析还可以帮助我们理解和评估问题的复杂度。
对问题的复杂度进行分析,有助于判断是否存在多项式时间解决问题的算法,并帮助我们进一步优化算法。
二、常见算法设计方法在算法设计中,有许多常见的设计方法可以帮助我们解决不同类型的问题。
以下是几种常见的算法设计方法:1. 贪心算法:贪心算法是一种简单而高效的算法设计方法。
在每个步骤中,贪心算法总是选择当前最优解,而不考虑未来可能带来的影响。
贪心算法通常用于求解一些最优化问题,如背包问题和最小生成树问题。
2. 动态规划:动态规划是一种将复杂问题分解成较小子问题的方法。
通过记忆已解决的子问题的解,动态规划可以避免重复计算,并提高算法的效率。
动态规划常用于求解最短路径问题、最长公共子序列等。
3. 分治算法:分治算法是一种将大问题分解成相互独立的小问题,并逐个解决的方法。
通过将问题分解为多个子问题,分治算法可以简化问题的求解过程。
高校计算机专业算法设计与分析课程知识点梳理

高校计算机专业算法设计与分析课程知识点梳理在高校计算机专业中,算法设计与分析是一门重要的课程,它涉及到计算机领域中各种算法的设计与分析方法。
本文将对这门课程的知识点进行梳理,以帮助读者更好地理解和掌握相关内容。
一、算法的基本概念与复杂度分析1.1 算法的概念与特性算法的定义与特性,包括输入、输出、确定性、可行性以及有穷性等。
同时介绍算法的基本表示方法,如伪代码和流程图。
1.2 算法的效率与复杂度介绍算法的效率概念,包括时间复杂度和空间复杂度。
讲解如何通过渐进分析来评估算法的复杂度,并介绍常见的渐进符号。
二、算法设计与分析方法2.1 穷举法与递归法介绍穷举法与递归法的基本思想和应用场景。
着重讲解递归的思想与递归函数的编写方法,并引入递归算法的时间复杂度计算方法。
2.2 分治法与动态规划介绍分治法和动态规划的思想和应用场景。
解释如何将问题划分为子问题,并通过合并子问题的解来得到原始问题的解。
同时介绍动态规划的基本原理和递推关系的建立。
2.3 贪心算法与回溯法介绍贪心算法和回溯法的基本思想和解决方法。
分析贪心算法的优缺点,并通过实例详细说明回溯法的应用。
三、常见算法的设计与分析3.1 排序算法介绍常见的排序算法,包括冒泡排序、插入排序、选择排序、快速排序和归并排序等。
讲解每种排序算法的基本思想、实现过程和时间复杂度分析。
3.2 查找算法介绍常见的查找算法,包括顺序查找、二分查找和哈希查找等。
分析每种查找算法的优劣和适用场景,并讲解它们的实现原理和时间复杂度。
3.3 图算法介绍图的基本概念和表示方法,然后讲解常见的图算法,包括深度优先搜索算法和广度优先搜索算法。
给出算法的伪代码和流程图,并分析它们的时间复杂度。
四、高级算法与数据结构4.1 贪心算法深入介绍贪心算法的概念和特点,以及如何设计贪心算法解决实际问题。
通过实例详细说明贪心算法的应用,并分析其正确性和适用性。
4.2 动态规划算法进一步讲解动态规划算法的原理和实现方法。
算法设计与分析基础

2023/12/21
20
LingJie/GDUT
1.2.6 详细表述该算法的方法
• 可以用到的工具有自然语言(nature
language)、伪代码(pseudocode)以及程序 流程图(flow chart)等。
• 当对一个问题有了概要的理解后,下面的工作
就是把这个问题的想法进行细化。所谓的细化 就是把它们表示成算法的步骤。
令执行顺序以及同步等问题。并行算法的设计 有相应的理论,这里仅考虑串行算法。
2023/12/21
17
LingJie/GDUT
1.2.3 选择精确或者近似的算法
• 解决问题下一步要考虑的是使用精确的还是近
似的算法。并不是每一个可解的问题都有精确 的算法,例如求一个数的平方根,求非线性方 程的解等。有时候一个问题有精确的解法但是 算法的执行效率很差,例如旅行家问题。因此 如果待处理的问题涉及到上述那些方面,则要 考虑是选择精确的还是近似的算法。
2023/12/21
10
LingJie/GDUT
-- 2* 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
-- 2 3*
5
7
9
11
13
15
17
19
21
23
25
-- 2 3
5*
7
11
13
17
19
23
25
-- 2 3
5
7
11
13
第一步:找出m的所有质因数。 第二步:找出n的所有质因数。 第三步:从第一步求得的m的质因数分解式和第二步求得的n
的质因数分解式中,找出所有公因数。 第四步:将第三步找到的公因数相乘,结果为所求的
大学_计算机算法设计与分析第4版(王晓东著)课后答案下载

计算机算法设计与分析第4版(王晓东著)课后答
案下载
计算机算法设计与分析第4版内容简介
第1章算法概述
1.1 算法与程序
1.2 算法复杂性分析
1.3 NP完全性理论
算法分析题1
算法实现题1
第2章递归与分治策略
2.1 递归的概念
2.2 分治法的基本思想
2.3 二分搜索技术
2.4 大整数的乘法
2.5 Strassen矩阵乘法
2.6 棋盘覆盖
2.7 合并排序
2.8 快速排序
2.9 线性时间选择
2.10 最接近点对问题
第3章动态规划
第4章贪心算法
第5章回溯法
第6章分支限界法
第7章随机化算法
第8章线性规划与网络流
附录A C++概要
参考文献
计算机算法设计与分析第4版目录
本书是普通高等教育“十一五”__规划教材和国家精品课程教材。
全书以算法设计策略为知识单元,系统介绍计算机算法的设计方法与分析技巧。
主要内容包括:算法概述、递归与分治策略、动态规划、贪心算法、回溯法、分支限界法、__化算法、线性规划与网络流等。
书中既涉及经典与实用算法及实例分析,又包括算法热点领域追踪。
为突出教材的`可读性和可用性,章首增加了学习要点提示,章末配有难易适度的算法分析题和算法实现题;配套出版了《计算机算法设计与分析习题解答(第2版)》;并免费提供电子课件和教学服务。
《算法设计与分析》第07章

南京邮电大学计算机学院 2008年3月
for (int r=2; r<=n;r++) for (int i=0;i<=n-r;i++) { int j=i+r-1; m[i][j]=m[i+1][j]+p[i]*p[i+1]*p[j+1]; s[i][j]=i; for (int k=i+1;k<j;k++) { int t=m[i][k] +m[k+1][j]+p[i]*p[k+1]*p[j+1]; if (t<m[i][j]) { m[i][j]=t;s[i][j]=k; } } } return m[0][n-1];
南京邮电大学计算机学院 2008年3月
for (int j=n-2;j>=0;j--){ float min=INFTY; for (ENode<T> *r=a[j];r;r=r->nextArc) { int v=r->adjVex; if (r->w+cost[v]<min) { min=r->w+cost[v];q=v; } } cost[j]=min;d[j]=q; } p[0]=0;p[k-1]=n-1; for(j=1;j<=k-2;j++) p[j]=d[p[j-1]]; delete []cost;delete []d; }
南京邮电大学计算机学院 2008年3月
7.3.3 矩阵连乘算法
【程序7-3】矩阵连乘算法 class MatrixChain { public: MatrixChain(int mSize,int *q); int MChain(); int LookupChain(); void Traceback(); ……
计算机算法设计与分析知识点整理

算法是一系列解决问题的清晰指令,也就是说,能够对符合一定规范的输入,在有限时间内获得所要求的输出。
简单的说,就是解决问题的一种方法或过程。
算法-特征:(1)确定性(2)多样性(3)有穷性(4)输出所需资源越少,该算法越好,计算机最重要的资源是时间和空间把基本操作(最重要的操作)次数作为算法运行时间的度量单位。
•T(n)≈c op C(n)基本操作的执行时间基本操作次数算法输入规模n为时间效率的参数算法的时间效率和空间效率都用输入规模的函数进行度量O(g(n)) 是增长次数小于等于g(n)(以及其常数倍,n趋向于无穷大)的函数集合。
符号О成立条件:对于所有足够大的n,t(n) 的上界由g(n)的常数倍数所确定。
即,存在大于0的常数c和非负的整数n0,使得:对于所有的n≥ n0来说,t(n) ≤c g(n)Ω(g(n))代表增长次数大于等于g(n)(以及其常数倍,n趋向于无穷大)的函数集合符号Ω成立条件:对于所有足够大的n,t(n)的下界由g(n)的常数倍所确定,即,存在大于0的常数c和非负的整数n0,使得:对于所有的n≥ n0来说,t(n) ≥c g(n)Θ(g(n))是增长次数等于g(n) (以及其常数倍,n趋向于无穷大)的函数集合。
符号Θ成立条件:对于所有足够大的n,t(n) 的上界和下界都由g(n)的常数倍数所确定,即,存在大于0的常数c1,c2和和非负的整数n0,使得:对于所有的n≥ n0来说,c2g(n) ≤t(n) ≤ c1g(n)算法的整体效率是由具有较大的增长次数的部分所决定的,即它的效率较差的部分。
动态规划算法的基本要素(1)最优子结构性质(2)重叠子问题性质矩阵连乘计算次序问题的最优解包含着其子问题的最优解。
这种性质称为最优子结构性质递归算法求解问题时,每次产生的子问题并不总是新问题,有些子问题被反复计算多次。
这种性质称为子问题的重叠性质动态规划算法,对每一个子问题只解一次,而后将其解保存在一个表格中,当再次需要解此子问题时,只是简单地用常数时间查看一下结果通常不同的子问题个数随问题的大小呈多项式增长动态规划算法的步骤(1)找出最优解的性质,并刻划其结构特征。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3
时空权衡中几种方法简介: 时空权衡中几种方法简介 按照一种更一般的表述,这个 (1)输入增强 按照一种更一般的表述 这个 )输入增强:按照一种更一般的表述 思想是对问题的部分或全部输入做预处理,然 思想是对问题的部分或全部输入做预处理 然 后对获得的额外信息进行存储,以加速后面问 后对获得的额外信息进行存储 以加速后面问 题的求解. (计数法排序、串匹配算法 计数法排序、 题的求解 计数法排序 串匹配算法) (2)预构造 采用空间换时间权衡思想的技 )预构造:采用空间换时间权衡思想的技 术简单地使用额外空间来实现更快和更方便 的数据存取. 散列法、 树作索引) 的数据存取 (散列法、以B树作索引) 树作索引 (3)还有一些和空间换时间权衡思想相关 ) 的算法设计技术: 的算法设计技术:动态规则
© School of Computer Science and Technology, SWUST
17
Horspool算法
Horspool算法的最差效率Θ(mn) 对于随机文本,它的效率为Θ(n)
/ © School of Computer Science and Technology, SWUST 18
MER ...
LEADER LEADER
sn-1 sn-1
移动幅度等于模式长度
OR ...
REORDER REORDER
把模式中前m-1个字符 中的c和文本中的c对齐
13
情况4 如果C正好是模式中的最后一个字符, 情况4:如果C正好是模式中的最后一个字符,而且 在模式的前m 个字符中也包含C 在模式的前m-1个字符中也包含C,移动的情况类 似于2 移动的时候应该把模式中前m 似于2:移动的时候应该把模式中前m-1个字符中 和文本中的C对齐。 的C和文本中的C对齐。 总结: 总结:如果预先算出每次移动的距离并把它们存在 表中,每个字符C 表中,每个字符C,可以用这个公式算出移动的 距离: 距离: t(C)=模式的长度为m,如果C不包含在模式的前m-1 t(C)=模式的长度为m 如果C不包含在模式的前m 模式的长度为 个字符;模式前m 个字符中最右边的C 个字符;模式前m-1个字符中最右边的C到模式最 后一个字符的距离, 后一个字符的距离,在其他情况下
for(j 0 to m-2 ) do Table[P[j]] m-1-j; return Table;
/ © School of Computer Science and Technology, SWUST 16
Horspool算法
/
Horspool算法中模式的移动距离
对于每一个字符c,移动距离t(c)为:
模式的长度m ,如果c不包含在模式的前m-1个字符中 ,其他
t(c)=
模式前m-1个字符中最右边的c到模式最后一个字符的距离 算法 ShiftTable(P[0..m-1])
例如:对于模式 //用Horspool算法和Boyer-Moore算法填充移动表 BAEBER,E,B,R,A的 //输入:模式p[0..m-1]以及一个可能出现字符的字符表 移动距离分别为1,2,3,4, //输出:以字母表中字符为索引的数组table[0..size-1] 其他的为6 把Table中的所有元素初始化为m;
如果不匹配字符c出现在模式中, (c)-k>0的 如果不匹配字符c出现在模式中,而且t1(c)-k>0的
这个公式也是可用的. 话,这个公式也是可用的.例: SnS0 …… AER ……Sn-1 Sn BARBER BARBER BARBER 如果t (c)-k≤0,则向右移动一个字符 则向右移动一个字符( 如果t1(c)-k≤0,则向右移动一个字符(不再遵 守原有法则) 守原有法则). 总之,该算法是这样计算坏符号移动d1的:如果这 总之,该算法是这样计算坏符号移动d1的 d1 个数值是正数,它等于t (c)-k;如果是 如果是0 个数值是正数,它等于t1(c)-k;如果是0或者负 则为1.公式表示为:d1=max{t (c)1.公式表示为 数,则为1.公式表示为:d1=max{t1(c)-k,1}
2
时空权衡
时空权衡是指在算法的设计中,对算法的 时间和空间作出权衡。 常见的以空间换取时间的方法有:
输入增强
计数排序,串匹配算法的改进
预构造
散列法,B树
动态规划
/
© School of Computer Science and Technology, SWUST
/ © School of Computer Science and Technology, SWUST 8
计数排序算法分析实例
13 11 12 13 12 12
数组值 频率 分布值
算法 DistributionCountingt(A[0..n-1]) for(j 0 to u-l) D[j] 0; for(i 0 to n-1) D[A[i]-l] D[A[i]-l]+1; for(j i+1 to u-l) D[j] D[j-1]+D[j]; for(i n-1 downto 0){ j A[j]-l; S[D[j]-1] A[i]; D[j] D[j]-1; } return S;
计数排序
思路:针对待排序列表中的每一个元素, 算出列表中小于该元素的元素个数,把结 果记录在一张表中。
/
© School of Computer Science and Technology, SWUST
6
计数排序算法
算法 ComparisonCountingSort(A[0..n-1]) for(i 0 to n-1) Count[i] 0; for(i 0 to n-1) for(j i+1 to n-1) if(A[i]<A[j]) Count[j] Count[j]+1; else Count[i] Count[i]+1; for(i 0 to n-1) S{Count[i]] A[i]; return S;
/
© School of Computer Science and Technology, SWUST
7
计数排序算法分析
技术排序算法在一种情况下还是卓有成效 的,即待排序元素的值都来自一个已知的 小集合。 如果元素的值是来自位于[l,u]之间的整数, 我们可以计算出这些值出现的频率,然后 把它们存在数组F[0..u-l]中。 然后把有序列表的前F[0]个位置填l,接下来 的F[1]个位置填入l+1.
11 1 1
12 3 4
13 2 6
/
© School of Computer Science and Technology, SWUST
9
串匹配中的输入增强技术
串匹配中的输入增强思想
对模式进行预处理,得到它的一些信息,然后在 查找的过程中使用这些信息。
两种著名算法
Horspool算法
考虑在某些文本中查找模式BARBER
s0s1 ... s0s1 ... c ...
BARBER
sn-1 sn-1
S ...
BARBER BARBER
移动幅度等于模式长度
s0s1 ...
B ...
BARBER BARBER
sn-1
模式中最右边的字符c和 文本中的c对齐
s0s1 ... s0s1 ...
MER ...
LEADER LEADER
sn-1 sn-1
移动幅度等于模式长度
OR ...
REORDER REORDER
把模式中前m-1个字符 中的c和文本中的c对齐
15
/
© School of Computer Science and Technology, SWUST
Boyer-Moore算法 7.2.2 Boyer-Moore算法
1)坏符号移动和移动表 1)坏符号移动和移动表 坏符号移动:由文本中的一个字符C 坏符号移动:由文本中的一个字符C所确定 的,它导致了模式中的相应字符和它不匹配 用公式t (c)- 来计算移动的距离, .用公式t1(c)-k来计算移动的距离,其中 (c)是Horspool算法用到的预先算好的表 t1(c)是Horspool算法用到的预先算好的表 中的单元, 是成功匹配的字符个数. 中的单元,而k是成功匹配的字符个数. 例如:S0 Sn例如:S0 …… SER …… Sn-1 BARBER BARBER 移动距离:t (s)BARBER 移动距离:t1(s)2=4
算法分析与设计
Analysis and Design of Computer Algorithms
第七章 时空权衡
Space and Time Tradeoffs
教学内容
时空权衡的方法 计数排序 串匹配中的输入增强技术 散列法 B树 要求
掌握时空权衡的概念及基本方法,掌握时空权衡 的方法在常见问题中的应用。
Horspool算法
考虑在某些文本中查找模式BARBER
s0s1 ... s0s1 ... c ...
BARBER
sn-1 sn-1
S 0s1 ...
B ...
BARBER BARBER
sn-1
模式中最右边的字符c和 文本中的c对齐
s0s1 ... s0s1 ...
Knuth-Morris-Part Boyer-Moore
我们从Boyer-Moore的简化版本 Horspool算法开始。
/ © School of Computer Science and Technology, SWUST 10
Horspool算法思路简介 Horspool算法思路简介 思路:从模式的最后一个R 1)思路:从模式的最后一个R开始从右向左 移动,比较模式和文本中的相应字符对。 移动,比较模式和文本中的相应字符对。如 果模式中所有的字符都匹配成功, 果模式中所有的字符都匹配成功,就找到了 一个匹配的子串。 一个匹配的子串。如果遇到一对不匹配字符 需要把模式右移。假设文本中, ,需要把模式右移。假设文本中,对齐模式 最后一个字符的元素是字符C Horspool算法 最后一个字符的元素是字符C,Horspool算法 根据C的不同情况来确定移动的距离。 根据C的不同情况来确定移动的距离。一般来 说考虑4种情况。 说考虑4种情况。