算法分析与设计2-算法分析技术

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
输入为I时所需的时间为T(n,I),T(n,I)称为算法的时间复杂性。
空间复杂性(Space Complexity): 如果问题的规模为n,解决这一问题的某算法在算法的
输入为I时所需的空间为S(n,I),S(n,I)称为算法的空间复杂性。
算法分析(Algorithm Analysis):分析算法复杂性的过程;
第三部分
算法分析技术
整理ppt
1
3.1 算法复杂性分析
1、算法复杂性: 它是度量算法计算难度的一种尺度,反映了算法消耗的
资源情况。 算法需要资源越多,其复杂性就越高;反之, 算法需要资源越少,其复杂性就越小。
时间复杂性(Time Complexity): 如果问题的规模为n,解决这一问题的某算法在算法的
整理ppt
9
3.1 算法复杂性分析
换更快的计算机,还是换更快的算法?
从增长率可以看出:算法不同,当计算机速度提高时,你得到 的解决问题规模的增益是不同的!
例如,当计算机的运行速度是提高为原来的10倍时,不同的算 法在解决问题的规模上得到的收益是有很大不同的。
f(n) 10n 20n 5nlogn 2n2 2n
A
即最优算法的时间(空间)复杂性为该问题的时间复杂性。
整理ppt
6
3.1 算法复杂性分析
最初,我们希望精确计算出算法的复杂性(用多少时间、
占多少空间)。但是,很难(可比性差),也没有必要!
精确测算出算法的性能指标是很难的,因为: (1)把两个或多个算法都写出程序代码须花费很大的时间 和精力; (2)可能会因为程序写的“好”而没有体现出算法的真正 质量,特别是程序员对算法有偏见时; (3)测试环境和测试数据的选择很难对各个算法公正; (4)你觉得好的算法也不一定达到要求,要重复设计算法、 写代码、测试。
整理ppt
4
3.1 算法复杂性分析
对于一个算法而言,在不同的执行时间内,它占用的内 存空间量不一定相等,也就是说,占用空间量y是时间x的函 数,即y=f(x)。
t
定义:时空积分= f (x)dx 其中t是算法0的运行时间。
时空积可以综合评价算法的时间、空间性能。
例如:一个算法的执行时间为
y
30秒,前10秒算法占用60个字
算法的最坏时间复杂性:
Tmax(n)=Max T(n,I)=T(n,I#)
IDn
Dn是规模为n的合法输入的集合,I#是使算法的时间达到 最大的一个输入;
整理ppt
3
3.1 算法复杂性分析
算法的平均时间复杂性: Tavg(n)= P(I) T(n,I) IDn
Dn是规模为n的合法输入的集合,p(I)是输入I出现的概率。
整理ppt
11
3.1 算法复杂性分析
3、复杂性的渐近估计 对算法,精确计算其增长率有时很难,如果能粗略比较出
哪个更快或更慢就可以了。于是在增长率的基础上提出渐近估 计的概念。
算法的渐近复杂性(Asymptotic Algorithm Analysis) 确切说:渐近分析是指当输入规模很大,或者说大到一
整理ppt
2
3.1 算法复杂性分析
算法的复杂性除了与问题的规模有关外,在规模一定 的情况下,输入的分布也会影响算法的复杂性。从而就有 了最好、最坏、平均复杂性。
算法的最好时间复杂性:
Tmin(n)=Min T(n,I)=T(n,I*) IDn
Dn是规模为n的合法输入的集合,I*是使算法的时间达到 最小的一个输入;
于是,既然我们的目的是为了比较,就应该将注意力集中在被 比较的对象之间最主要的差别。如果两个程序执行步数分别是 3n+2和3n+20,则这两个程序的时间复杂性不会有太大的差别, 即使这两个程序的每个执行步操作数可能有所不同,这两个程 序的时间复杂性至多相差一个常数倍。
最后,就有了一个关注点, 算法性能的增长率!
节,第2个10秒占用70个字节, 80
最后10秒占用80个字节,则:
70
时空积如图。
60
效率
60*10+70*10+80*10=2100(字节秒)
整理ppt
5
10 20 30
x
3.1 算法复杂性分析
2、问题的时间(空间)复杂性: 假设问题有多个算法,所有算法的集合表示为,其中A是
其中的一个算法,即A ,它的时间(空间)复杂性表示为 TA(n),问题的时间(空间)复杂性定义为:Min( TA(n) )。
百度文库整理ppt
7
3.1 算法复杂性分析
然后,我们又提出用评估的方法,抓主要矛盾和核心的东西, 用统计基本操作或步数来估计复杂性。
但是,值得注意的是无论是操作计数还是执行步数都不能够非 常准确地描述时间复杂性,特别是在需要比较时。例如:
t1(n)=10n2+20n-100 t2(n)=1000n+500 哪个更好??
n 1000 500 250 70 13
n’ 变化
n’/n
10000 n’=10n 10
5000 n’=10n 10
1842 10n<n’<10n 7.37
223 n’=10 n 3.16
16 n’=n+3 --
注: n是原来解决问题 规模; n’是现在解决问题 规模
整理ppt
10
3.1 算法复杂性分析
对算法空间复杂性可以同样定义。
实践证明,可操作性最好且最有实际价值的是最坏复杂性!
注: 输入规模的概念和具体问题有关,对有些问题来说,最自然的度量
标准是输入中的元素个数(例如,排序);对另一些问题其规模的最佳 度量是输入数在二进制表示下的位数(例如整数相乘);还有的问题需 要用两个数表示输入规模(例如图的顶点数和边数)。
整理ppt
8
3.1 算法复杂性分析
算法的增长率(growth rate):是指当输入增长时,算法 代价的增长速率。具体就体现在两个函数的变化趋势上。
T(n)=f(n) S(n)=g(n)
线性增长率(linear growth rate) 二次增长率(quadratic growth rate) 指数增长率(exponential growth rate)
提高计算速度对不同时间复杂性函数的影响对比
时间复杂性函数
n n2 n3 n5 2n 3n
用现在的计算机 N1 N2 N3 N4 N5 N6
用快 100 倍的计算机 100N1 10N2 4.64N3 2.5N4 N5+6.64 N6+4.19
用快 1000 倍的计算机 1000N1 3.16N2 10N3 3.98N4 N5+9.97 N6+6.29
相关文档
最新文档