文章目录
先修知识
常见序列的求和公式
求和例子
上面的例子同等比数列的差别在于从首项的常数变成了未知数,利用2的巧妙拆分去求和,下面的例子里将会用到这一公式。
估计和式上界的放大法
二分检索算法的平均时间复杂度分析实例
二分检索算法伪代码表示
假设待检索数列T的长度为n,下面的左图表示x(待查找的数)在数列T中的各个位置,而右边则表示x不在数列中的各个情况。那么输入的所有情况便是两种的总和2n+1
对于上图的所有输入情况,每种情况的输入个数如下图所示,尤其值得注意的是比较k次的(因为上面假设了n同k的特殊关系)输入个数,后面的n+1便是上图中所有不在数列T中的情况。
那么总的输入次数便是对每个输入乘以次数并求和
总的输入次数除以总的输入情况便是我们的要求的平均时间复杂度。如果觉得理解有困难的话,你可以类比一下,上面各种情况的输入次数表示每个人各有的不等的苹果数量,而输入情况的总数便是人的数量,那我们要求每个人平均的苹果数便是如此求。
值得一提的是,虽然我们求的平均时间复杂度,却没有出现时间,因为我们这里求得是平均输入次数,那么自然也可以类似等价于平均时间复杂度。
递推方程的几种求法
迭代法
先引入例子
操作方法
- 不断用递推方程的右部替代左部
- 每次替代随着n的降低,在和式中多出至少一项
- 直到出现初值则迭代停止
- 将初值代入并用常用的序列求和进行求和
- 可用数学归纳法验证解的正确性
换元迭代
利用二分归并排序来举例
读者可以尝试用不换元进行直接迭代,将会比较不直观。
因为问题的复杂度是成倍的减小的,但通过换元我们可以将其化简为类似问题复杂度-1的情况
下面是迭代的求解过程
差消法化简高阶递推方程
1. 采用快速排序的例子引入
2. 下面是输入的总的n种情况
3. 工作量总和
4. 那么快速排序的平均工作量如下,将会非常不好求。那么我们的目标是去化简中间的求和序列,考虑其能否转化成我们上面的递推式(只同问题规模-1的下一项相关而言)
5. 考虑等比数列的差消化简得方式
6. 利用上面常规得迭代求法,最后式子中得符号可以看我的另一篇文章关于函数渐近的界。
递归树方法
递归树的概念
迭代在递归树中的表示方法
递归树的生成规则
递归树生成实例
生成的递归树
对递归树上的量求和
递归树的应用实例
主定理
主定理的应用背景
主定理概念
注:对下下面等式中的O符号等有疑问的,可以参考我的另一篇关于函数渐近的界的文章。
主定理证明过程
主定理的应用
不能使用主定理的例子
上面的反例我们可以采用递归树的方法去求解
文章的主体内容为北京大学屈婉玲老师的网课内容的整理