mirror of
https://github.com/krahets/hello-algo.git
synced 2026-05-11 11:07:14 +08:00
Unify punctuation.
This commit is contained in:
@@ -6,9 +6,9 @@
|
||||
|
||||
给定三根柱子,记为 `A` , `B` , `C` 。起始状态下,柱子 `A` 上套着 $n$ 个圆盘,它们从上到下按照从小到大的顺序排列。我们的任务是要把这 $n$ 个圆盘移到柱子 `C` 上,并保持它们的原有顺序不变。在移动圆盘的过程中,需要遵守以下规则:
|
||||
|
||||
1. 圆盘只能从一个柱子顶部拿出,从另一个柱子顶部放入;
|
||||
2. 每次只能移动一个圆盘;
|
||||
3. 小圆盘必须时刻位于大圆盘之上;
|
||||
1. 圆盘只能从一个柱子顶部拿出,从另一个柱子顶部放入。
|
||||
2. 每次只能移动一个圆盘。
|
||||
3. 小圆盘必须时刻位于大圆盘之上。
|
||||
|
||||

|
||||
|
||||
@@ -26,9 +26,9 @@
|
||||
|
||||
对于问题 $f(2)$ ,即当有两个圆盘时,**由于要时刻满足小圆盘在大圆盘之上,因此需要借助 `B` 来完成移动**,包括三步:
|
||||
|
||||
1. 先将上面的小圆盘从 `A` 移至 `B` ;
|
||||
2. 再将大圆盘从 `A` 移至 `C` ;
|
||||
3. 最后将小圆盘从 `B` 移至 `C` ;
|
||||
1. 先将上面的小圆盘从 `A` 移至 `B` 。
|
||||
2. 再将大圆盘从 `A` 移至 `C` 。
|
||||
3. 最后将小圆盘从 `B` 移至 `C` 。
|
||||
|
||||
解决问题 $f(2)$ 的过程可总结为:**将两个圆盘借助 `B` 从 `A` 移至 `C`** 。其中,`C` 称为目标柱、`B` 称为缓冲柱。
|
||||
|
||||
@@ -48,9 +48,9 @@
|
||||
|
||||
对于问题 $f(3)$ ,即当有三个圆盘时,情况变得稍微复杂了一些。由于已知 $f(1)$ 和 $f(2)$ 的解,因此可从分治角度思考,**将 `A` 顶部的两个圆盘看做一个整体**,执行以下步骤:
|
||||
|
||||
1. 令 `B` 为目标柱、`C` 为缓冲柱,将两个圆盘从 `A` 移动至 `B` ;
|
||||
2. 将 `A` 中剩余的一个圆盘从 `A` 直接移动至 `C` ;
|
||||
3. 令 `C` 为目标柱、`A` 为缓冲柱,将两个圆盘从 `B` 移动至 `C` ;
|
||||
1. 令 `B` 为目标柱、`C` 为缓冲柱,将两个圆盘从 `A` 移动至 `B` 。
|
||||
2. 将 `A` 中剩余的一个圆盘从 `A` 直接移动至 `C` 。
|
||||
3. 令 `C` 为目标柱、`A` 为缓冲柱,将两个圆盘从 `B` 移动至 `C` 。
|
||||
|
||||
这样三个圆盘就被顺利地从 `A` 移动至 `C` 了。
|
||||
|
||||
@@ -70,9 +70,9 @@
|
||||
|
||||
至此,我们可总结出汉诺塔问题的分治策略:将原问题 $f(n)$ 划分为两个子问题 $f(n-1)$ 和一个子问题 $f(1)$ 。子问题的解决顺序为:
|
||||
|
||||
1. 将 $n-1$ 个圆盘借助 `C` 从 `A` 移至 `B` ;
|
||||
2. 将剩余 $1$ 个圆盘从 `A` 直接移至 `C` ;
|
||||
3. 将 $n-1$ 个圆盘借助 `A` 从 `B` 移至 `C` ;
|
||||
1. 将 $n-1$ 个圆盘借助 `C` 从 `A` 移至 `B` 。
|
||||
2. 将剩余 $1$ 个圆盘从 `A` 直接移至 `C` 。
|
||||
3. 将 $n-1$ 个圆盘借助 `A` 从 `B` 移至 `C` 。
|
||||
|
||||
对于这两个子问题 $f(n-1)$ ,**可以通过相同的方式进行递归划分**,直至达到最小子问题 $f(1)$ 。而 $f(1)$ 的解是已知的,只需一次移动操作即可。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user