mirror of
https://github.com/krahets/hello-algo.git
synced 2026-08-10 11:00:59 +00:00
Mention figures and tables in normal texts.
Fix some figures. Finetune texts.
This commit is contained in:
@@ -16,7 +16,7 @@
|
||||
|
||||
### 考虑基本情况
|
||||
|
||||
对于问题 $f(1)$ ,即当只有一个圆盘时,则将它直接从 `A` 移动至 `C` 即可。
|
||||
如下图所示,对于问题 $f(1)$ ,即当只有一个圆盘时,我们将它直接从 `A` 移动至 `C` 即可。
|
||||
|
||||
=== "<1>"
|
||||

|
||||
@@ -24,14 +24,12 @@
|
||||
=== "<2>"
|
||||

|
||||
|
||||
对于问题 $f(2)$ ,即当有两个圆盘时,**由于要时刻满足小圆盘在大圆盘之上,因此需要借助 `B` 来完成移动**,包括三步:
|
||||
如下图所示,对于问题 $f(2)$ ,即当有两个圆盘时,**由于要时刻满足小圆盘在大圆盘之上,因此需要借助 `B` 来完成移动**。
|
||||
|
||||
1. 先将上面的小圆盘从 `A` 移至 `B` 。
|
||||
2. 再将大圆盘从 `A` 移至 `C` 。
|
||||
3. 最后将小圆盘从 `B` 移至 `C` 。
|
||||
|
||||
解决问题 $f(2)$ 的过程可总结为:**将两个圆盘借助 `B` 从 `A` 移至 `C`** 。其中,`C` 称为目标柱、`B` 称为缓冲柱。
|
||||
|
||||
=== "<1>"
|
||||

|
||||
|
||||
@@ -44,15 +42,18 @@
|
||||
=== "<4>"
|
||||

|
||||
|
||||
解决问题 $f(2)$ 的过程可总结为:**将两个圆盘借助 `B` 从 `A` 移至 `C`** 。其中,`C` 称为目标柱、`B` 称为缓冲柱。
|
||||
|
||||
### 子问题分解
|
||||
|
||||
对于问题 $f(3)$ ,即当有三个圆盘时,情况变得稍微复杂了一些。由于已知 $f(1)$ 和 $f(2)$ 的解,因此可从分治角度思考,**将 `A` 顶部的两个圆盘看做一个整体**,执行以下步骤:
|
||||
对于问题 $f(3)$ ,即当有三个圆盘时,情况变得稍微复杂了一些。
|
||||
|
||||
因为已知 $f(1)$ 和 $f(2)$ 的解,所以我们可从分治角度思考,**将 `A` 顶部的两个圆盘看做一个整体**,执行下图所示的步骤。这样三个圆盘就被顺利地从 `A` 移动至 `C` 了。
|
||||
|
||||
1. 令 `B` 为目标柱、`C` 为缓冲柱,将两个圆盘从 `A` 移动至 `B` 。
|
||||
2. 将 `A` 中剩余的一个圆盘从 `A` 直接移动至 `C` 。
|
||||
3. 令 `C` 为目标柱、`A` 为缓冲柱,将两个圆盘从 `B` 移动至 `C` 。
|
||||
|
||||
这样三个圆盘就被顺利地从 `A` 移动至 `C` 了。
|
||||
|
||||
=== "<1>"
|
||||

|
||||
@@ -68,7 +69,7 @@
|
||||
|
||||
本质上看,**我们将问题 $f(3)$ 划分为两个子问题 $f(2)$ 和子问题 $f(1)$** 。按顺序解决这三个子问题之后,原问题随之得到解决。这说明子问题是独立的,而且解是可以合并的。
|
||||
|
||||
至此,我们可总结出汉诺塔问题的分治策略:将原问题 $f(n)$ 划分为两个子问题 $f(n-1)$ 和一个子问题 $f(1)$ 。子问题的解决顺序为:
|
||||
至此,我们可总结出下图所示的汉诺塔问题的分治策略:将原问题 $f(n)$ 划分为两个子问题 $f(n-1)$ 和一个子问题 $f(1)$ 。子问题的解决顺序为:
|
||||
|
||||
1. 将 $n-1$ 个圆盘借助 `C` 从 `A` 移至 `B` 。
|
||||
2. 将剩余 $1$ 个圆盘从 `A` 直接移至 `C` 。
|
||||
|
||||
Reference in New Issue
Block a user