搜索
您的当前位置:首页算法设计与分析总结

算法设计与分析总结

来源:智榕旅游
路漫漫其修远兮,吾将上下而求索 -

第一章 绪论 1、重要特性 1.输入 2.输出 3.有穷性 4.确定性 5.可行性

2、描述算法的方法

1.自然语言:优点是直观易懂,缺点是容易出现二义性

2.流程图:优点是直观易懂,缺点是严密性不如程序设计语言,灵活性不如自然语言 3.程序设计语言:优点是计算机直接运行,缺点是抽象性差 4.伪代码:

3、递归算法分析 1.猜测技术

2.扩展递归技术 3.通用分治递归推式

cn1 T(n)kaT(n/b)cnn1O(nlogb)abkaT(n)O(nklogb)abk

O(nk)abk

第二章 NP完全理论

第三章 蛮力法

3.1 蛮力法的设计思想

a蛮力法依赖的基本技术——扫描技术,即采用一定的策略将待求解问题的所有元素依次处理一次,从而找出问题的解; 关键——依次处理所有元素。

3.2 查找问题中的蛮力法 3.2.1 顺序查找O(n) 3.2.2串匹配问题 BF O(n*m) BMP O(n+m)

0j1next[j]max{k|1kj&\"t1t2tk1\"\"tjk1tjk2tj1\"}

1elseBM O(n*m) 11

路漫漫其修远兮,吾将上下而求索 -

mjjmax{j|tjc&1jm1} dist(c)elsem3.3 排序问题中的蛮力法

3.3.1 选择排序O(n2) 3.3.2 起泡排序O(n2) 3.4 组合问题中的蛮力法 3.4.1 生成排列对象O(n!) 3.4.2 生成子集O(2n) 3.4.3 0/1背包问题O(2n) 3.4.4 任务分配问题O(n!) 3.5 图问题中的蛮力法 3.5.1 哈密顿回路问题O(n!) 3.5.2 TSP问题O(n!)

3.6 几何问题中的蛮力法 3.6.1 最近对问题O(n2) 3.6.2 凸包问题O(n3)

3.7 实验项目——串匹配问题

第四章 分治法

4.1 分治法的设计思想

设计思想:将要求解的原问题划分成k个较小规模的子问题,对这k个子问题分别求解。如果子问题的规模仍然不够小,则再将每个子问题划分为k个规模更小的子问题,如此分解下去,直到问题规模足够小,很容易求出其解为止,再将子问题的解合并为一个更大规模的问题的解,自底向上逐步求出原问题的解。 步骤:(1)划分(2)求解子问题(3)合并

4.2 排序问题中的分治法 4.2.1 递归排序O(nlog2n) 4.2.2 快速排序O(nlog2n) 4.3 组合问题中的分治法

4.3.1 最大字段和问题O(nlog2n) 4.3.2棋盘覆盖问题O(4k)

4.3.3 循环赛日程安排问题O(4k) 4.4 几何问题中的分治法 4.4.1 最近对问题O(nlog2n) 4.4.2 凸包问题O(nlog2n) 4.5 实验项目——最近对问题

第五章 减治法

5.1 减治法的设计思想 22

路漫漫其修远兮,吾将上下而求索 -

原问题的解只存在于其中一个较小规模的子问题中,所以,只需求解其中一个较小规模的子问题就可以得到原问题的解。

5.2 查找问题中的减治法 5.2.1 折半查找O(log2n) 5.2.2 二叉查找树O(log2n) 5.3 排序问题中的减治法 5.3.1 堆排序O(log2n) 5.3.2 选择问题O(log2n) 5.4 组合问题中的减治法 5.4.1 淘汰塞冠军问题O(n) 5.4.2 假币问题O(log2n)

5.5 实验项目——8枚硬币问题

第六章 动态规划法

6.1动态规划法的设计思想

将待求解问题分解成若干个相互重叠的子问题,每个子问题对应决策过程的一个阶段,将子问题的解求解一次并填入表中,当需要再次求解此子问题时,可以通过查表获得该子问题的解而不用再次求解。 步骤:

将原始问题分解为相互重叠的子问题,确定动态规划函数; 求解子问题,填表;

根据表,自底向上计算出原问题的解。

6.2 图问题中的动态规划法 6.2.1 TSP问题O(2n)

d(i,V')min{cikd(k,V'{k})}(kV')d(k,{})cki(ki)6.2.2 多段图的最短路径问题O(n+m)

cost[i]min{cijcost[j]}(ijn)path[i]cijcost[j]6.3 组合问题中的动态规划法 6.3.1 0/1背包问题O(n*C)

nwixiCi1xi{0,1}(1in)

maxvixii1n33

路漫漫其修远兮,吾将上下而求索 -

V(i,0)V(0,j)0V(i1,j)jwi V(i,j)max{V(i1,j),V(i1,jwi)vi}jwi0V(i,j)V(i1,j)xi

1,jjwiV(i,j)V(i1,j)6.3.2 最长公共子序列问题O(n*m)

L[0][0]L[i][0]L[0][j]0(1im,1jn)xiyj,i1L[i1][j1]1L[i][j]max{L[i][j1],L[i1][j]}xiyj,j1 . xiyi1S[i][j]2xiyi&L[i][j1]L[i1][j]3xy&L[i][j1]L[i1][j]

ii6.4 查找问题中的动态规划法

6.4.1 最优二叉查找树O(n^3)

C(i,i1)0(1in1)C(i,i)pi(1in)C(i,j)min{C(i,k1)C(k1,j)ps}(1ijn,ikj)sij

6.4.2 近似串匹配问题

0iD(i,j)min{D(i1,j1),D(i1,j)1,D(i,j1)1}i0,min{D(i1,j1)1,D(i1,j)1,D(i,j1)1}i0,6.5 实验项目——最大子段和问题

第七章 贪心法

7.1 贪心法的设计思想

i0j0j0,pitij0,piti

贪心法在解决问题的策略上目光短浅,只根据当前已有的信息就做出局部最优选择,而且一旦做出了选择,不管将来有什么结果,这个选择都不会改变。 贪心法的关键在于决定贪心策略。

7.2 图问题中的贪心法 7.2.1 TSP问题O(2n) 7.2.2 图着色问题

7.2.3 最小生成树问题O(2n) 7.3 组合问题中的贪心法 44

路漫漫其修远兮,吾将上下而求索 -

7.3.1 背包问题O(nlog2n) 7.3.2 活动安排问题O(nlog2n) 7.3.3 多机调度问题O(n*m) 7.4 实验项目——哈夫曼编码

第八章 回溯法

8.1 回溯法的设计思想

从解空间树根结点出发,按照深度优先策略遍历解空间树,在搜索至树中任一结点时,先判断该结点对应的部分解是否满足约束条件,或者是否超出目标函数的界,也就是判断该结点是否包含问题的(最优)解,如果肯定不包含,则跳过对以该结点为根的子树的搜索,即所谓剪枝(Pruning);否则,进入以该结点为根的子树,继续按照深度优先策略搜索。直到搜索到叶子结点,则得到问题的一个可能解。 步骤:

确定解向量和分量的取值范围,构造解空间树; 确定剪枝函数;

对解空间树按深度优先搜索,搜索过程中剪枝; 从所有的可能解中确定最优解。

8.2 图问题中的回溯法 8.2.1 图着色问题

8.2.2 哈密顿回路问题 8.3 组合问题中的回溯法 8.3.1 八皇后问题

8.3.2 批处理作业调度问题 8.4 实验项目——0/1背包问题

第九章 分支界限法

9.1 分支限界法的设计思想

1)首先确定一个合理的限界函数,并根据限界函数确定目标函数的界[down, up] ,并确定限界函数;

2)然后按照广度优先策略遍历问题的解空间树,在分支结点上,依次搜索该结点的所有孩子结点,分别估算这些孩子结点的限界函数的可能取值;

3)如果某孩子结点的限界函数可能取得的值超出目标函数的界,则将其丢弃;

55

路漫漫其修远兮,吾将上下而求索 -

否则,将其加入待处理结点表(以下简称表PT)中;

4)依次从表PT中选取使限界函数的值是极值的结点成为当前扩展结点; 5)重复上述过程,直到找到搜索到叶子结点,如果叶子结点的限界函数的值是极值,则就是问题的最优解,否则,找到其他极值结点重复扩展搜索。 步骤: 确定解空间树 确定限界函数

按广度优先搜索解空间树,计算限界函数的值,填入PT表

从PT表中寻找极值,继续扩展结点,直到找到限界函数值为极值的叶子结点。

9.2 图问题中的分支限界法 9.2.1 TSP问题

lb(2c[ri][ri1]mini1riUk1rjUr)/2

j9.2.2 多段图的最短路径问题

lbc[rj][rj1]min{c[ri1][vp]}j1iji2min

k9.3 组合问题中断饿分支限界法 9.3.1 任务分配问题

lbvki1min

n9.3.2 批处理作业调度问题

5

9.4 实验项目——电路布线问题

第十章 概率算法

66

因篇幅问题不能全部显示,请点此查看更多更全内容

Top