算法课
- 渐进符号介绍
- 如何求解递归式
渐进符号
大O符号
: there are consts such that for all
例子: O()意味着小于或等于
又可视为函数集
因此
More convention(惯例、宏)
Example(后面用Ex替代). 等价于存在使得
Ex. 等号左右两边的式子是不允许掉换的,即不对称的
符号
与大O相反, 确定了下界
: there are consts such that for all
又可视为函数集
Ex. 由高中数学可知 处于 上方
硬约束
和 与大写符号存在一个常数c不同,小写符号要求对所有c成立,要依赖于c
Ex. 由函数图像可知,当时,对于所有c,成立
Ex. 由于没有交点,故找不到对应的
解递归式
具体有三种方法,需要注意的一点是递归问题没有通用的解法
代换法
- 1.猜答案: 猜形式
- 2.用归纳验证
- 3.解得常数
Ex. 首先这个问题的答案是且
用代换法解该例子
- 猜
- 设 for 已经成立
-
可以发现当时成立,即
当猜时,用同样的过程但无法使得,可见需要使用其他方法
因此不能简单的用, 而是
- 猜 for
-
若要让则
同时要考虑到base case。因为所以要足够大才能
递归树法
由于主要是图的形式,而图暂时还没弄好,故建议这部分看《算法导论》
主方法
特点是只能应用到特定的递归式上,形式如
其中(意味着至少递归一次),,渐进趋正(对于足够大的n, f(n)为正)
通过比较与(递归树节点的数量)分为3种情况:
(注:本来直观上树节点的数量应该是,每层增加a倍,总共层,利用换底公式变成上面的样子)
-Case1
for some (多项式小于)
此时
-Case2
for some
此时
-Case3
for some for some (主要保证递归过程中在变小)
此时
例子
Ex.
注意到a = 4, b = 2, 即以及
可知应该属于Case1,代入得
Ex.
与上面例子同理,但考虑到Case1的无法取0,故属于Case2,得
Ex.
同理该例子属于Case3,
Ex.
该例子则找不到Case符合,因为Case2要求,该例子中k=-1
主方法的具体证明则不在此介绍,需要的可以翻翻《算法导论》
(看在敲公式敲了一下午的份上,希望有缘的你看完可以点个喜欢)