[MIT算法导论]笔记


算法时间复杂度

主方法

case 1:
f(n)=O(n^(log(b)a-ε)) (ε>0=>T(n)=Θ(n^log(b)a)

case 2:
f(n)=Θ (n^log(b)(lgn)^k)(k>=0=>T(n)=Θ(n^log(b)(lgn)^(k+1))

case 3
f(n)=Ω(n^(log(b)a+ε))(ε>0&& 存在0<ε‘<1,使得af(n/b)<=(1-ε’)·f(n)
=>T(n)=Θ(f(n))

case 1可用递归树证明:
在这里插入图片描述

在这里插入图片描述


分治法

归并排序

排序步骤:

  • n为1时,已经完成排序。

  • n大于1时,递归的对A[1~┏n/2┓]这部分以及A[┏n/2┓+1~n]这部分排序。
    (┏ ┓表示向上取整)

  • 将排序好的两个表合并,比较两个表,依次取出最小者到输出序列中。

  • 运行时间:
    递归函数为T(n)=2T(n/2)+Θ(n)。(递归时间+非递归时间)
    使用主方法,为case2 ,所以T(n)= Θ(nlgn)。

乘方问题

和二分查找实质一样,将指数n二分:

有实数X和正整数n计算X^n。
当n为偶数时,X^n=X^(n/2)·X^(n/2),当n为奇数时,X^n=X^((n-1)/2)·X^((n-1)/2)·X。
  • 运行时间:
    递归函数为T(n)=T(n/2)+Θ(1)。
    使用递归树法T(n)= Θ(lgn)。

斐波那契数列

  1. Fn=φn/5(1/2)结果取最接近的整数(round)。(φ是黄金分割数)
    该方法无法用计算机实现(精确度不够的原因)。
    运行时间:Θ(lgn)。

    扫描二维码关注公众号,回复: 11648006 查看本文章
  2. 平方递归式:

(F(n+1)  Fn)  = (1 1)n
(Fn  F(n-1))    (1 0)

运行时间:Θ(lgn)

证明方法可采用归纳法:

  1. (F2 F1) = (1 1)1
    (F1 F0) (1 0)
  2. (F(n+1) Fn) = (Fn F(n-1)) (1 1)
    (Fn F(n-1)) (F(n-1) F(n-2)) (1 0)
    由定义可知上式成立。

参考:
主定理 Master-Theorem
MIT算法导论公开课之课程笔记

猜你喜欢

转载自blog.csdn.net/m0_45338067/article/details/108538549