9.分治与递归
介绍如题的内容。
汉诺塔
汉诺塔是颇为出名的游戏,有三根柱子,一开始一根柱子上有
经典的做法是递归。要移动
实际上这也就是我们能做到的最好的办法了。我们总要移动最后一个圆盘,在这时,其他圆盘一定在剩下的柱子上,也就是说此时的步数
如何求解呢,高中我们学过待定系数,刷题的功劳就是,由于过分的熟悉,我们会机械地两边加一构造等比数列。但一般地呢,如果我们没见过呢?
猜测与验证是非常常见的数学方法。猜到答案之后,利用归纳法证明,是一个很不错的路径。我们算出前几项,不难发现是
如果这时候还注意不出来,可以直接一层一层地套递推式,容易观察到这样的结构:
其中
归并排序(merge sort)
给
- 给
和 排序 - 合并两边,比较两边最小值即可
设
合并中,最差情况下我们比较
这个式子就没法一眼顶针了。通常我们算出几项观察。前几项会是
再次代入就得到
如果忍住化简前面的式子,这样总能猜到了(
最后,在我们美丽的假设下,令
几乎是线性的,比挨个比较快上不少。
比较发现:
二者形式相似但差别巨大,就在于
一般地不是
[!归纳] 奠基步:
,成立。 归纳步:假设
, ,利用假设得到 ,尽管不知道 的奇偶性,但是 总会是 ,那么 也成立。 那么利用归纳公理就得到原命题成立。
那么也就是说
之前我们总是能通过猜和代入递推式解决,但是并不总是那么美妙。
这如果进行代入,就是大工程了(
Akra-Bazzi 定理
形如下式的递归方程:
-
:子问题的系数(如你图中 前面的 )。 -
:规模缩减比例(如 和 )。 -
:合并开销,必须是多项式,而且要求 。 -
:微小的扰动(比如之前的取整符号 ),要求 。
第一步:求出关键指数 这是最核心的一步。你需要找到一个 ,使得下列等式成立:
这个
第二步:代入公式
一旦算出
据教授说,这个式子通过猜测得到(
如果你愿意,可以尝试用归纳法验证,但有些
我们尝试用用:
积分只要拆开就行,是容易的,最后也就得到
这并不很能显示定理的强大,我们看这个
运用定理,我们要找到
幸运的是
看起来可怕的递推变成了无脑的计算。但是
我们就要考虑:
积分那项却很简单:
出来一个
我们并不需要知道具体的
可以类似上方地证明。这样就十分方便了。