jxxjxxjxx

导航

 

两个主要任务:正确性(不变性x单调性)+复杂度

c++等高级语言的基本指令,均等效于常数条RAM的基本指令;在渐进意义下,两者大体相当

分支转向:goto //算法的灵魂,出于结构化考虑,被隐藏了

迭代循环:for() 、while() 、....//本质是“if+goto”

调用加递归(自我调用)//本质也是goto

 

复杂度分析的主要方法:

迭代:级数求和

递归:递归跟踪+递推方程

猜测+验证

 

级数:

算数级数:与末项平方同阶

T(n)=1+2+3+......+n=O(n^2)

幂方级数:比幂次高出一阶

T(n)=1^2+2^2+3^2+......+n^2=O(n^3)

T(n)=1^3+2^3+3^3+......+n^3=O(n^4)

T(n)=1^4+2^4+3^4+......+n^4=O(n^5)

.......

几何级数(a>1):与末项同阶

T(n)=a^0+a^1+a^2+......+a^n=O(a^n)

1+2+4+....+2^n=O(2^n)

收敛级数:

1/1/2 +1/2/3 +1/3/4 +......+ 1/(n-1)/n = O(1)

1+1/2^2 +......+ 1/n^2 = O(1)

1/3 +1/7 +1/8+...... = O(1)

可能未必收敛,然而长度有限:

h(n)=1 + 1/2 +1/3 +...+ 1/n =O(log n) //调和级数

log 1 + loh 2 + log 3 + ...... log n =O(nlog n) //对数级数

 

递归:

递归跟踪分析(直观形象,仅适用于简明的递归模式):

检查每个递归实例

累计所需时间(调用语句本身,计入对应的子实例)

其总和即为算法执行时间

递推方程:

T(n)=T(n-1) + O(1)

T(0)=O(1)

求解:

T(n)-n=T(n-1)-(n-1)=...

    =T(2)-2

    =T(1)-1

    =T(0)

T(n)=O(1)+n=O(n)

posted on 2019-01-28 10:17  jxxjxxjxx  阅读(168)  评论(0)    收藏  举报