- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第一章算法概述
1、算法的五个性质:有穷性、确定性、能行性、输入、输出。
2、算法的复杂性取决于:(1)求解问题的规模(N),(2)具体的输入数据(I),(3)算法本身的设计(A),C=F(N,I,A)。
3、算法的时间复杂度的上界记号O,
?下界记号Ω(记为f(N) = Ω(g(N))。 即算法的实际运行时间至少需要g(n)的某个常数倍时间),
同阶记号Θ:f(N)= Θ(g(N))表示f(N)和g(N)同阶 。
即算法的实际运行时间大约为g(n)的某个常数倍时间。
低阶记号o:f(N)=o(g(N))表示f(N)比g(N)低阶。
多项式算法时间:
O(1)O(logn)O(n)O(nlogn)O(n2)O(n3)
约定logn表示以2为底的对数。指数时间算法时间:
O(2n)O(n!)O(nn)
4、常用算法的设计技术:分治法、动态规划法、贪心法、回溯法和分支界限法。
5、常用的几种数据结构:线性表、树、图。
6、算法:是指解决某一问题的运算序列
第二章递归与分治
1、递归算法的思想:将对较大规模的对象的操作归结为对较小规模的对象实施同样的操作。
递归的时间复杂性可归结为递归方程:
其中,a是子问题的个数,b是递减的步长, ~表示递减方式,D(n)是合成子问题的开销。
递归元的递减方式~有两种:1、减法,即n – b,的形式。2、除法,即n / b,的形式。
2、递减方式为减法 设D(n)为常数,则有T(n) = O(an)。
(这里都是针对递减方式为除法的哦)D(n)为常数c:这时,T(n) = O(np)。
D(n)为线形函数cn:
D(n)为幂函数nx:
考虑下列递归方程:T(1) = 1
⑴T(n) = 4T(n/2) +n
⑵ T(n) = 4T(n/2) +n2
⑶ T(n) = 4T(n/2) +n3
解:方程中均为a = 4,b = 2,其齐次解为n2。
对⑴,∵ a b1 (D(n) = n) ∴ T(n) = O(n2);
对⑵,∵ a = b2 (D(n) = n2)∴ T(n) = O(n2log n);
对⑶,∵ a b3 (D(n) = n3)∴ T(n) = O(n3);
证明一个算法的正确性需要证明两点:1、算法的部分正确性。2、算法的终止性。
3、汉诺塔问题:
void Hanoi(int n, int Fr, int To, int As)
{
if (n 0) {
Hanoi(n–1, A, C, B);
Move(A, B);
Hanoi(n–1, C, B, A)}
}
4、二分查找代码
第三章贪心算法(旅行商问题、单源最短路径问题)
以下两种算法都是为了查找最小生成树问题的算法:
1、Prim算法的基本思想:在保证连通的前提下依次选出权重较小的n – 1条边。
(在实现中体现为n个顶点的选择)。
G=(V, E)为无向连通带权图,令V={1, 2, …, n}。
设置一个集合S ,初始化S = {1},T = Φ。
贪心策略:如果V–S中的顶点j与S中的某个点i连接且(i, j) 的权重最小,于是就选择j(将j加入S),并将(i, j) 加入T中 。
重复执行贪心策略,直至V–S为空。
=============================证明最小生成树必然包含最小权值边=================
若G的任何最小生成树都不包含e1。设T为G的最小生成树,e1(T。于是T+e1是一个有回路的图且该回路中包含e1。该回路中必有条不是e的边ei。令T’={T+e1}–ei。T’也是G的生成树。又c(T’) = c(T) + c(e1) – c(ei),c(e1) ≤ c(ei),从而 c(T’)≤c(T),T’是G的最小生成树且含有边e1。矛盾。故必定有图G的最小生成树包含了e1。
=============================================================================
2、Kruskal算法的基本思想:基本思想:在保证无回路的前提下依次选出权重较小的n – 1条边。如果(i, j)是E中尚未被选中的边中权重最小的,并且(i, j)不会与已经选择的边构成回路,于是就选择 (i, j)。具体做法:先把所有n个点画出来。不画边。然后把权值最小的那条边画上去。然后再把当前权值最小的边(不算画了的边)画上去。如果构成回路则
文档评论(0)