算法分析与设计复习提纲.docVIP

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

第=1+1页共sectionpages11页

第一章算法基础

算法(algorithm)是什么?

一个算法是对特定问题求解步骤的一种描述,它是指令的有限序列。

算法的五个特征:

输入(input):算法有零个或多个输入量;

输出(output):算法至少产生一个输出量;

确定性(definiteness):算法的每一条指令都有确切的定义,没有二义性;

能行性(effectiveness):算法的每一条指令必须足够基本,它们可以通过已经实现的基本运算执行有限次来实现;

有穷性(finiteness):算法必须总能在执行有限步之后终止。

程序(Program)是算法用某种程序设计语言的具体实现。算法必须可终止,程序却没有这一限制。Windows是程序不是算法。

一个好的算法应具有以下4个重要特性:

正确性(correctness):算法的执行结果应当满足预先规定的功能和性能要求。

简明性(simplicity):算法应思路清晰、层次分明、容易理解、利于编码和调试。

效率(efficiency):算法应有效使用存储空间,并具有高的时间效率。

最优性(optimality):算法的执行时间已达到求解该类问题所需时间的下界。

第二章算法分析

渐近分析中函数比较

f(n)=O(g(n))≈f(n)≤g(n);(渐进上界)

f(n)=Ω(g(n))≈f(n)≥g(n);(渐进下界)

f(n)=Θ(g(n))≈f(n)=g(n);(紧渐紧界)

f(n)=o(g(n))≈f(n)g(n);(非紧渐进上界)

f(n)=ω(g(n))≈f(n)g(n).(非紧渐进下界)

传递性:都有

反身性f(n)=Θ(f(n));f(n)=O(f(n));f(n)=Ω(f(n)).,

对称性:f(n)=Θ(g(n))?g(n)=Θ(f(n)).

互对称性:f(n)=O(g(n))?g(n)=Ω(f(n));f(n)=o(g(n))?g(n)=ω(f(n));

算术运算:

O(f(n))+O(g(n))=O(max{f(n),g(n)});

O(f(n))+O(g(n))=O(f(n)+g(n));

O(f(n))*O(g(n))=O(f(n)*g(n));

O(cf(n))=O(f(n));其中c是一个正的常数;

如果g(n)=O(f(n))?则O(f(n))+O(g(n))=O(f(n))。

f=O(f)。

最常见的多项式时间算法的渐近时间复杂度

O(1)<O(logn)<O(n)<O(nlogn)<O(n^2)<O(n^3)

最常见的指数时间算法的渐近时间复杂度

O(2n)<O(n!)<O(n^n)

求T(n)表达式:

T(n)=2T(n?1)+1

=2(2T(n?2)+1)+1

=2^2T(n?2)+2+1

=2^3T(n?3)+2^2+2+1

=2^(n?1)T(1)+…+2^2+2+1

=2^(n?1)+…+2^2+2+1

=2^n?1

第五章分治法

分治法的基本思想:

将一个复杂的问题分解成若干个规模较小、相互独立,但类型相同的子问题求解;然后再将各子问题的解组合成原始问题的一个完整答案。

一个问题能够用分治法求解的要素是:

1,问题能够按照某种方式分解成若干个规模较小、相互独立且与原问题类型相同的子问题;2,子问题足够小时可以直接求解;3,能够将子问题的解组合成原问题的解。

两路合并排序:

templateclassT

voidSortableListT::Merge(intleft,intmid,intright)

{T*temp=newT[right-left+1];

inti=left,j=mid+1,k=0;

while((i=mid)(j=right))

if(l[i]=l[j])temp[k++]=l[i++];

elsetemp[k++]=l[j++];

while(i=mid)temp[k++]=l[i++];

while(j=right)temp[k++]=l[j++];

for(i=0,k=left;k=right;)l[k++]=temp[i++];

}

templateclassT

voidSortableListT::MergeSort(intleft,intright)

{if(leftright)

{intmid=(left+right)/2;

MergeS

文档评论(0)

趁早学习 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档