1、递归方程组解的渐进阶的求法迭代法用这个方法估计递归方程解的渐近阶不要求推测解的渐近表达式,但要求较多的代数运算。方法的思想是迭代地展开递归方程的右端,使之成为一个非递归的和式,然后通过对和式的估计来达到对方程左端即方程的解的估计。作为一个例子,考虑递归方程:接连迭代二次可将右端项展开为:由于对地板函数有恒等式:(6.10)式可化简为:这仍然是一个递归方程,右端项还应该继续展开。容易看出,迭代 i 次后,将有(6.11)而且当时,(6.11)不再是递归方程。这时:(6.13)又因为aa,由(6.13)可得:而由(6.12),知 ilog4n ,从而,代人(6.14)得:即方程(6.9)的解 T(
2、n)=O(n)。从这个例子可见迭代法导致繁杂的代数运算。但认真观察一下,要点在于确定达到初始条件的迭代次数和抓住每次迭代产生出来的“自由项“(与 T 无关的项)遵循的规律。顺便指出,迭代法的前几步迭代的结果常常能启发我们给出递归方程解的渐近阶的正确推测。这时若换用代入法,将可免去上述繁杂的代数运算。图 6-1 与方程(6.15)相应的递归树为了使迭代法的步骤直观简明、图表化,我们引入递归树。靠着递归树,人们可以很快地得到递归方程解的渐近阶。它对描述分治算法的递归方程特别有效。我们以递归方程T(n)=2T(n/2)+n2 (6.15)为例加以说明。图 6-1 展示出(6.15)在迭代过程中递归树
3、的演变。为了方便,我们假设 n恰好是 2 的幂。在这里,递归树是一棵二叉树,因为(6.15) 右端的递归项 2T(n/2)可看成T(n/2)+T(n/2)。图 6-1(a)表示 T(n)集中在递归树的根处,(b)表示 T(n)已按(6.15) 展开。也就是将组成它的自由项 n2 留在原处,而将 2 个递归项 T(n/2)分别摊给它的 2 个儿子结点。(c)表示迭代被执行一次。图 6-1(d)展示出迭代的最终结果。图 6-1 中的每一棵递归树的所有结点的值之和都等于 T(n)。特别,已不含递归项的递归树(d)中所有结点的值之和亦然。我们的目的是估计这个和 T(n)。我们看到有一个表格化的办法:先按横向求出每层结点的值之和,并记录在各相应层右端顶格处,然后从根到叶逐层地将顶格处的结果加起来便是我们要求的结果。照此,我们得到(6.15) 解的渐近阶为(n2)。再举一个例子。递归方程:T(n)= T(n/3)+ T(2n/3)+n (6.16)的迭代过程相应的递归树如图 6-2 所示。其中,为了简明,再一次略去地板函数和天花板函数。图 6-2 迭代法解(6.16)的递归树当我们累计递归树各层的值时,得到每一层的和都等于 n,从根到叶的最长路径是设最长路径的长度为 k,则应该有,得,于是即 T(n)=O(nlogn) 。以上两个例子表明,借助于递归树,迭代法变得十分简单易行。