决策树与递归式

讨论基于比较的排序算法
排序算法如果依赖比较,时间复杂度做的不会比nlogn更好,我们可以依据比较的过程画一棵决策树,每进行一次比较都会有两种结果(事先不知道数的大小),将这次结果设为根节点,往下引入两个叶子结点,把未分出大小的接着比较,比较到最后会有n!种结果,因为有n!种排列。而通往每个结果的路径就是比较的过程,这样就形成了一棵决策树,叶子结点也就是n!个,树的深度就是比较的次数,近似看成一个完全二叉树,那么平均时间复杂度就是log(2*n!),也就是nlog(n)的数量级

这种类似的二叉树结构还可以用于递归式的求解

常见的递归式有:
T(n)=T(n-1)+1
T(n)=2(n/2)+n
T(n)=T(n/3)+T(2n/3)+n

例如T(n)=T(n/4)+T(n/2)+n^2
前面两项是将问题分解成两个子问题,n^2指的是将两个子问题合并成原问题所需的时间

例如T(n)=T(αn)+T((1-α)n)+cn

这个递归式解释了为什么快速排序算法是快的,因为只要选取的元素能将数列分成数列长度的α倍而不是一个常数,那么速度方面就是log级别的

以上都是递归式求解

接下来介绍主定理
适用形式:T(n)=aT(n/b)+f(n)


谁大,时间复杂度就由谁来决定,当一样大时,再多乘一个logn

差分方程的应用典型就是求解斐波那契数列的递归式
当T(n)=aT(n)+f(n)形式给出,一般表达式都是指数型,这个也不例外

具体的思路可以假设底数为x,然后分析出系数,与常微分方程求解类似

posted @ 2021-09-25 16:52  empty_thought  阅读(407)  评论(0)    收藏  举报