麻省理工学院公开课-第三讲:分治法

http://blog.csdn.net/ai552368625/article/details/38108459

http://www.cnblogs.com/banli/archive/2013/06/01/3112583.html

主定理:

分治思想

  1. Devide:把问题分为若干子问题.
  2. Conquer:递归地解决子问题.
  3. Combine:合并子问题的解.

分治思想的应用:

归并排序:

  1. 将长度为n的待排序数组分为两个子数组.
  2. 递归地对子数组进行归并排序.
  3. 合并排序好的子序列.

  T(n) = 2T(n) + O(n) = Θ(lgn).

  

 

  

 

 

二分查找:

  1. 找到有序数组的中间元素.
  2. 递归地在满足条件的一个子数组中查找.
  3. nothing

  

 

数的乘幂(an):

  基本实现方法:n个a相乘n-1次.  T(n)=Θ(n).

  分治法:

  

 

斐波那契数列:

  

  •   基本方法-递归法:

  欲计算 F(n),则要计算 F(n-1),F(n-2),etc.时间复杂度为指数级 T(n) = Ω(φn),φ=(黄金分割点)

  •   Bottom-Up法:

  按序计算 F(0),F(1),F(2),...,F(n).每个F(n)只需计算一次,下一次可以使用上一次的计算结果.改进后 T(n)=Θ(n).

 

  •   朴素平方递归法:

  该方法用到斐波那契数列的一个性质,即,

 

  φ=(黄金分割点),并取至最接近的整数,那就是第n位斐波那契数。 T(n) = Θ(lgn).

 

  该算法理论上可行,实际上这种方法在现有条件下不能实现,在实际中的机器上,由于浮点运算的精度会受到四舍五入的影响,最终得不到正确的答案.

 

  •   平方递归法:

  该方法用到斐波那契数列的另一个性质,即

  

矩阵乘积(方阵):

  • 矩阵分块,实现分治:

  T(n)=Θ(n3)

  • 斯特拉森算法

  T(n)=Θ(nlg7).

 

posted @ 2015-06-11 17:58  菜鸟_xf  阅读(158)  评论(0编辑  收藏  举报