- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
算法分析与设计2009第1讲【荐】.doc
第一章 算法分析技术
§1.1 算法及复杂性
算法从何入手,求解问题。计算机干什么?将所有想让计算机干的事全部描述成问题。
问题:什么是问题,怎么描述,日常生活中的问题描述,实际就是要让计算机干什么。输入,输出。
两个要素:输入输出,要有严格的描述。
实例:描述问题的所有参量。
询问:陈述问题所求的解的格式和解应满足的性质。
注意,计算机每次求解只是针对一个实例求解,问题的描述针对所有实例,给一个统一的描述。
算法:对每个问题实例计算机都能计算出满足询问条件的正确答案的计算方法。是一个过程,语句集合,语句有顺序,按照顺序执行语句,处理实例,得到正确答案。一种计算方法。对每个实例计算都能得到正确答案。
程序:算法的形式描述。
例子:求xn,求幂问题
实例(instance):实数x和正整数n
询问(query):xn=?
n=10,求:x10
每次计算x和n都不同,都是一个实例。
方法:算法,
1 x*x*x*x*x*x*x*x*x*x
y=x*x, z=y*y, w=z*z, x10=y*w
3 [(x*x)2*x]2
方法1,2,3分别作9,4,4次乘法。考虑算法的总操作次数,*这个总操作次数称为算法的时间复杂度,或称为算法时间复杂性。
一个算法所需要的存储单元数目称为算法的空间复杂度,算法1,23的空间复杂度分别为2,4,2。
算法3的计算:两个变量,y=x*x;y=y*y;y=y*x;y=y*y。(要存储x和x*x)
时间复杂度和空间复杂度,不能太精确,没法太精确。因为相同的方法,两个人编出不同程序,同一个人两个时刻也编出不同程序。肯定不会完全相同。给出一个数量级来表达,数量级的参数是什么。数量级表示算法时间复杂性的增长趋势。
算法3推广到一般如何:想一种通用的办法。
1 begin
/n的m位2进制数为bm-1bm-2…b1b0
2 y=x
3 for i=m-2 down to 0 do
4 begin
5 y=y*y
6 If bi==1 then y=y*x
7 end
8 end
例子:n= (11)10=(1011)2
算法的空间复杂度为2。2也不是太对,随着y增大,所需存储位越来越大。真正用于存储求计算数值的就两个空间单元。
若n=100 … 0,则T(n)=(log2n( ,若n=111…1,则T(n)=2(log2n(
算法的时间复杂度随着n的增大而增大,要考虑算法时间复杂度T(n)的随着n的增长率。n是x的个数。
真正讨论算法时间复杂度时,总关心算法时间复杂度随着实例规模增大而增大的数量级。
上述算法的时间复杂度显然跟实例有关,也跟n有关。满足:
(log2n((T(n)(2(log2n(
§1.2 渐进估计技术及基本规则
在算法分析时,十分关心算法时间复杂度或空间复杂度的增长率,并不十分关心算法时间复杂度的具体值。时间复杂度不会比空间复杂度大。
算法时间复杂度随着实例规模增大而增大。问题规模怎样表示?每个问题都有一个参量说明问题的规模。
给出一个随着问题规模增大,算法时间复杂性也增大的趋势的描述。用时间复杂性的界来表示。
两个符号:O(*),((*)
1 若存在n0和C,使当nn0时,T(n)(Cf(n),则称T(n)=O(f(n))
如,T(n)=(1+n)2=O(n2)
T(n)=2n3+4n2=O(n3)
O(f(n))描述算法时间复杂度的上界,说明算法好时往往用O(f(n))。
2 存在常数C,存在无穷多个n,使T(n)(Cg(n),则记为:T(n)=((g(n))
如:T(n)=2n+(3/2)n= ((2n),可以写成O(2n)吗?
可以写成T(n)=?(((3/2)n)
T(n)=
可以写成:T(n)=((n2)吗,O(n2),O(n),((n)
例1.2排序算法,将数组中的数据排列成递增次序:
Procedure bubblesort(A[1-n] of integer)
Begin
1 for i=1 to n-1
2 for j=n down to i+1 do
3 if A[j-1]A[j] then
4 begin
5 temp=A[j-1]
6 A[j-1]=A[j]
7 A[j]=temp
8 end
9 end
时间复杂度分析,考虑最坏情况。有时比较完成以后要交换,有时不要交换,比较一次,交换3次。第一遍比较n-1次,第二遍比较n-2次,…………。时间复杂度。只算比较次数:用作时间复杂度的计数。
T(n)=(n-1)+(n-2)+…+2+1=n(n-1)/2=O(n2)§1.3递归算法分析
例子:合并排序
Function mergesort(L:list of integer, n)
Begin
If n==1
文档评论(0)