4
Chapter 1 RECURRENCE ¢¤3*P3*P'fH2*q yˇ«˝v˙ª(0 R(recurrence)R1/ˇ*ªV*lª 1.1 Hanoi '*^8WºZIœT(Hanoi)/p Edouard Lucas (1883tœe*W8*T1 ˛0ˇzweW(3*æP-*1/t*T˛ *æPß0*æP!Œß¤*v8' =( Lucas'wn*j+GE*BrahmaT G64*>(3*»æP(, *æP>v}/g9nMb˜ß0, 9æPng:@ß¡\@S TL`m /&ªv/>`F/(M`˙* )lÆnª(§7ZM Z}_1/ߤ/E¯e¡ ªˇ7}1/,BrahmaT64*Iœ T8*'Qn*7 1

concert mathematics 1.2

Embed Size (px)

DESCRIPTION

concert mathematics

Citation preview

Page 1: concert mathematics 1.2

Chapter 1

RECURRENCE

这章探讨了3个例子,这3个例子将让我们感知我们将学什么。它们有2个共同的特点:他们都已经被科学家们反复的研究过;他们的解法都运用到了递归(recurrence),递归就是每一个问题的解法都依赖于一个相近的问题的解法。

1.1 Hanoi

让我们看看一个非常巧妙的谜题,它的名字叫做汉诺塔(Hanoi),是法国数学家Edouard Lucas 在1883年提出来的。我们有一个套了8个圆盘的塔,最初由从下到上递减的顺序堆积起来套在3个柱子中的一个上:目标就是使整个塔从一个柱子移到另一个柱子,一次只能移动一个圆盘,并且永远不能够让大的圆盘落在小的圆盘上。

Lucas给他的玩具安置了一个浪漫的传奇故事:一个更大的Brahma塔,它假定有64个纯金的圆盘,安放在3个钻石的柱子上。最初,他说,上帝在第一个柱子上安放了这些金盘,并且命令一群牧师根据前面的规则把他们移到第三根柱子上,据说这些牧师们夜以继日的为着他们的任务工作着。当他们完成的时候,塔将粉碎,世界将毁灭。

谜题是否有解决方法并不是显而易见的,但是稍加思考(或者以前见过这个问题)使我们相信,它确实有解决方法。现在,问题产生了:我们怎样做,才能做得最好?也就是说有多少移动是充分的而且必要的来完成这个任务?

解决像这样问题最好的办法就是将它一般化,Brahma塔有64个圆盘而汉诺塔有8个圆盘,让我们考虑如果有n个圆盘会怎样。

1

Page 2: concert mathematics 1.2

2 CHAPTER 1. RECURRENCE

这样一般化的好处就是我们能够把问题剖析的更透彻些。事实上,我们将在此书中重复看到,首首首先先先思思思考考考简简简单单单的的的情情情况况况是有益的。很容易看到当它只含有1个或2个盘子的时候如何移动。并且小数量的试验方法暗示我们如何移动有三个圆盘的塔。

解决问题的下一步就是引进合适的标号,命命命名名名并并并且且且攻攻攻克克克,我们说Tn是在Lucas的规则下把n个圆盘从一个柱子移动到另一个柱子的所用的最少次数。这样,T1明显是1,T2显然为3。

通过考虑最小的情况,我们也能够毫不费力的得到另一条数据:显然T0 =0,因为当柱子上有0个盘子的时候根本不需要进行移动!聪明的数学家是从来不愧于思考简单的问题,因为当一个特殊的情况(尽管它有时不重要)被理解透彻的时候,一般的模型会更容易的被感知。

现在让我们来变换我们的视角并且尝试把思考范围扩大些:我们如何移动一个大的塔呢?3个盘子的塔的试验告诉我们,先移动上面2个圆盘到中间的柱子,然后移动第3个圆盘,接着将另外的2个圆盘移动上去,通过这样的方法来达到目的。这给我们移动n个盘子大体上的提供了线索:我们先把最上面的n− 1个圆盘移动到一个不同的柱子上(需要Tn−1次移动),然后移动最大的那个圆盘(1次移动),最后我们将这n − 1个盘子移回最大的盘子上(又需要Tn−1次移动),这样,我们通过至多2Tn−1 + 1次移动将n个盘子移动完成,即:

Tn ≤ 2Tn−1 + 1, n > 0

这个公式用了”≤”而不是”=”,因为我们的解释只证明了2Tn−1 + 1是充分的,我们并没有说明他是必要的。可能会有聪明的人在想是否有更简单的移法。

然而真的有更好的方法吗?事实上没有。在某种程度上,我们一定要移动最大的圆盘。一旦我们这样做,我们必须把n− 1个圆盘移动到单独的柱子上,并且它至少需要Tn−1次移动才能移到那,如果我们不警觉,我们可能将最大的圆盘不止移动了一次。但是当我们最终移动最大的圆盘后,我们必须把n− 1个盘子(又必须在一个单独的柱子上)移回最大的盘子上,这也需要Tn−1次移动,因此,

Tn ≥ 2Tn−1 + 1, n > 0

这两个不等式,与显而易见的n = 0的结果联立起来,由此得出

T0 = 0;

Tn = 2Tn−1 + 1;(1.1)

(意识到这些公式与我们已经知道的T1 = 1和T2 = 3相一致。我们对小情况分析的经验不仅帮助我们找到了普遍的公式,而且提供了一个便捷的方法来检验我们是否犯了某些低级错误。这样的检查对我们后面的章节中将进行更加复杂的演算来说是非常珍贵的。)

一系列像(1.1)这样的等式,叫做递归式(recurrence relation or recursion re-lation),它给了我们一个临界值和一个大体值取决于前一个值的等式。有些时候我们把那些等式也单独的称为递归式,尽管它还需要一个边界值来完善。

Page 3: concert mathematics 1.2

1.1. HANOI 3

递归允许计算任何我们想要的n的Tn值。但没有人会真正的想要用一个递归来计算,当n很大的时候,需要计算很长时间。递归式仅仅只给出不直接的,狭隘的信息。一个递归的处理办法会让我们更加兴奋。那就是,我们需要一个好的,简洁的,“更直接的形式”的Tn,即便是n很大的时候,也能让我们计算的更快。根据这个更加直接的形式,我们能够理解Tn到底是多少。

那么我们如何处理一个递归式呢?一种方法就是猜测正确的结论,然后去证明我们的猜测。在我们又一次看了小的情况后,成功的计算出了T3 = 2 ·3+1 =7;T4 = 2 · 7 + 1 = 15;T5 = 2 · 15 + 1 = 31;T6 = 2 · 31 + 1 = 63;

哈哈!它无疑是像这样:

Tn = 2n − 1; n ≥ 0 (1.2)

至少它对n ≤ 6是成立的。

数学归纳法(Mathmatical induction)是一种证明某些整数n关于n ≥ n0成立的命题的普遍方法。首先我们证明当n为其最小值n0的时候命题成立,这个叫做基值(basis).然后我们证明当n > n0时命题成立,假设包括从n0到n− 1的值全部已经被证明出来了,这个叫做归纳(induction)。这样的证明只需有限次的工作便可得到无限多的结果。

递归式理想的建立于数学归纳法,在我们的情况中,举个例子,(1.2)式简单的从(1.1)变化而来:基值是显而易见的,因为T0=20-1=0。然后归纳出当n¿0,假定我们(1.2)式对n-1成立,我们用n-1来替换n:

Tn = 2Tn−1 + 1 = 2(2n−1 − 1) + 1 = 2n − 1.

这样(1.2)式对n也成立了。好样的!我们成功的对Tn求解了。

毫无疑问,牧师们的工作还没有结束,他们仍然需要负责任地移动圆盘,并且还会持续一段时间,因为对于n=64来说需要264 − 1(大概1.8 × 1019)次移动圆盘。即便他们以不可能达到的1微秒(10−6s)移动1个盘子的速度,也需要超过5000个世纪的时间来完成Brahma塔。而Lucas的原始的问题更加实际些,它需要28 − 1 = 255次移动,如果手的动作快的话,大概需要4分钟。

汉诺塔递归问题是被提出的很多应用问题中的典型例子。在寻找像Tn这样的等式的直接形式时,我们要考虑以下三点:

1. 关注简单的情况,这给我们解决问题提供了一些见解,并将在2,3点中帮助我们。

2. 寻找并且证明一个数学表达式来表现其特征,对于汉诺塔来说,像(1.1)这样的递归式提供给我们一种趋向,能够计算任何n的Tn值。

3. 通过数学归纳法,寻找并且证明一个直接的形式,对于汉诺塔来说,这是一个递归得出(1.2)式

这三点是我们将贯穿此书的方法,事实上,我们可以经常跳过1,2点,因为一个数学表达式将会在开始直接给我们,但是那时,我们要考虑些子问题,这些子问题也会使我们思考以上三点。

Page 4: concert mathematics 1.2

4 CHAPTER 1. RECURRENCE

我们对汉诺塔的分析使我们得到了正确的答案,但是他需要一个“归纳性的跳跃”;我们靠的是一个对结果的幸运的猜测。本书的一个重要目的之一是解释一个人并不需要十分有洞察力,也能解决递归问题。例如,我们将看到,递归式(1.1)将在等式两边同时加上1。

T0 + 1 = 1;

Tn + 1 = 2Tn−1 + 2, n > 0

现在如果我们让Un = Tn + 1,我们有:

U0 = 0;

un = 2Un−1 − 1, n > 0.(1.3)

这并不需要太多天赋发现,这个递归式的结果是Un = 2n ,这样Tn =2n − 1。连计算机都能够发现这些。