递归树
M叉平衡树之高贯穿算法分析。正因其精妙的性质,算法复杂度才出现对数。
假设我们有一个递归函数,其函数体中恒有 处递归调用,且栈深有限。若以时间为轴,函数栈指针所在函数为状态,则沿着时间轴积累函数栈最高的情况,递归函数的时序轨迹会形成一颗平衡满M叉树。
事实上,函数递归通常伴随着剪枝,递归树不总是平衡的。但只要是树结构,我们都能估计或精算其高度。
M叉树
叶子的数量
-
命题:高为 的M叉树最多有 个叶子。
-
证明:
思路是对高度进行数学归纳。
首先来看高为 的情况:树只有根,以及至多 片叶子。故得基底步骤:高为 的M叉树最多有 片叶子。
归纳假设:高为 的M叉树最多有 片叶子。
设T为满足归纳假设的树,则T的叶子通常也是其子树的叶子,而子树通过分别删减它们的根与T根之间的边产生。
每棵子树的高都不大于 ,根据归纳假设,每棵最多有 片叶子。
因为最多有 棵子树,且每棵最多有 片叶子,所以T最多有 片叶子。
树的高度
-
命题:
-
若一颗M叉树有 片叶子,则其高 ;
-
若M叉树为满且平衡,则其高 。
-
-
证明:
已知 ,对不等式两侧取对数可得 ,因为 为整数,所以 。
对于平衡满M叉树,每片叶子都在第 或 层。高为 的树,第 层至少有一片叶子,这意味着平衡满二叉树的叶子数必定多于 ,即 。对不等式两侧取对数,可得 。因此 。