您的位置:首页 > 其它

关于运行时间的一些想法

2013-01-09 10:44 260 查看
递归贪心算法的伪代码如下:

RECURISIVE-ACTIVITY-SELECTOR(s,f,i,n)
m <- i+1
while( m<= n and s[m] < f[i])
do m <- m+1
if m<= n
then return {a[m]} +  RECURISIVE-ACTIVITY-SELECTOR(s,f,m,n)
else return empty


书上的结论是:假设活动已根据结束时间进行排序,那么该算法的运行时间为Θ(n),对该运行时间进行分析

联想到QUICKSORT在最坏的情况下运行时间可以如下表示:T(n) = T(n-1) + Θ(n),根据代换法,假设其运行时间为Θ(n^2),不难证明。

贪心算法我捉摸如何将运行时间利用这样的递归形势表达出来,可是这样的伪代码,列不出这样的求解形式,所以着手于其他方法,我们这样理解:运行时间无非是比较次数,由于集合中每个元素在贪心算法中只是比较了1次,那么运行时间即为Θ(集合元素个数)。

由此想总结下几个的伪代码的运行时间:

分支合并算法

MERGE-SORT(A,p,r)
if p < r
then q <- (p+r)/2
MERGE-SORT(A,p,q)
MERGE-SORT(A,q+1,r)
MERGE(A,p,q,r)


T(n) = 2T(n/2) + Θ(n),运行时间为Θ(nlg(n))

遍历二叉查找树

INORDER-TREE-WALK(x)
if  x != NIL
then INORDER-TREE-WALK(left[x])
print key[x]
INORDER-TREE-WALK(right[x])


T(n) = T(k) + T(n - k -1) + d

用替代法 T(n) = (c + d)n +c,从而证明 T(n) = Θ(n)

矩阵链乘法的递归式

RECURISIVE-MATRIX-CHAIN(p,i,j)
if i = j
then return 0
m[i,j] = ∞
for k <-- i to j-1
do q <--RECURISIVE-MATRIX-CHAIN(p,i,k)+RECURISIVE-MATRIX-CHAIN(p,k+1,j) + p[i-1]p[k]p[j]
if q < m[i,j]
then m[i,j] <--q
return m[i,j]


T(n) ≧ 1 + ∑(T(k) + T(n-k) + 1)

T(n) ≧ n +2* ∑(T(i))

利用替代法T(n) = Ω(2²)可以证明得到

因此递归法调用RECURUSIVE-MATRIX-CHAIN(p,1,n)的工作总量至少为n的指数

本文的由递归贪心算法的运行时间的求解,告之不是所有的运行时间都是要列出递归表达式,推广到一些典型的运行时间递归式,总结其运行时间,方便以后能快速运用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: