斯坦福 算法1 第二周笔记

来自斯坦福网站的Algorithms: Design and Analysis,与目前coursera上的版本内容没有变化,不过时间安排略有不同。

1 The Master Method

这个方法是一个用来在数学上分析递归算法计算复杂度的常用方式。

1.1 介绍

比如第一周课程里讲到的关于两个整数乘法的递归算法。naive的算法是每次递归成4个更小的整数乘法,复杂度的递推式为 T ( n ) ≤ 4 T ( n / 2 ) + O ( n ) T(n) \leq 4T(n/2) + O(n) T(n)4T(n/2)+O(n),而改进版本是每次递归成3个更小的整数乘法,递推式为 T ( n ) ≤ 3 T ( n / 2 ) + O ( n ) T(n) \leq 3T(n/2) + O(n) T(n)3T(n/2)+O(n)。the master method就是用来分析比较这种形式的算法复杂度。

这个方法是一个可以直接应用的公式,相当于一个黑箱。它的应用前提是每次递归分成的小的问题是同样大小的(整数除不尽的那种也可以)。其正式描述如下:
在这里插入图片描述
而对应这个问题描述,相应的算法复杂度结果如下:
在这里插入图片描述

1.2 举例

可以举几个例子来验证这个方法的正确性。

  1. 归并排序: a=2,b=2,d=1对应第一种,结果是 O ( n l o g n ) O(nlogn) O(nlogn)
  2. 二分查找: a=1,b=2,d=0对应第一种,结果是 O ( l o g n ) O(logn) O(logn)
  3. naive的递归整数乘法: a=4,b=2,d=1对应第三种,结果是 O ( n 2 ) O(n^{2}) O(n2)
  4. 高斯改进的递归乘法: a=3,b=2,d=1对应第三种,结果是 O ( n 1.59 ) O(n^{1.59}) O(n1.59)
  5. strassen矩阵乘法: a=7,b=2,d=2对应第三种,结果是 O ( n 2.81 ) O(n^{2.81}) O(n2.81)
  6. 假设一个递归: a=2,b=2,d=2对应第二种,结果是 O ( n 2 ) O(n^{2}) O(n2)

1.3 证明

将当前的条件与假设写成如下形式:
在这里插入图片描述
可以考虑利用在归并排序中用过的递归树的形式来完成证明。用递归树的方式最重要的一条就是计算出每一层中有多少个subproblem,每个subproblem有多少数据。

在当前假设下,第j层中有 a j a^{j} aj个subproblem,而每个subproblem有 n / b j n/b^{j} n/bj个数据。递归树一共有 l o g b n log_{b}n logbn层。于是在第j层中,所有的计算量的上限为: a j ∗ c ∗ ( n b j ) d = c n d ∗ ( a b d ) j a^{j}*c*(\dfrac{n}{b^{j}})^{d} = cn^{d}*(\dfrac{a}{b^{d}})^{j} ajc(bjn)d=cnd(bda)j。最后将每一层的计算量加起来,得到整个算法的计算量为: t o t a l w o r k ≤ c n d ∗ ∑ 0 l o g b n ( a b d ) j total work \leq cn^{d}*\sum_{0}^{log_{b}n}(\dfrac{a}{b^{d}})^{j} total

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值