关于运行时间的一些想法

递归贪心算法的伪代码如下:

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的指数


本文的由递归贪心算法的运行时间的求解,告之不是所有的运行时间都是要列出递归表达式,推广到一些典型的运行时间递归式,总结其运行时间,方便以后能快速运用








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值