我正在阅读Algorithms by Robert Sedgewick
下面是第213页的一段摘录,内容涉及数字二进制表示中尾随零的个数。
对于河内的塔问题,通信的含义
使用n位数字是一个简单的任务算法。我们可以移动
按以下两个步骤将一个销钉向右堆放,直至完成:
如果n为奇数,则向右移动小盘(如果n为偶数,则向左移动)
做唯一不涉及小磁盘的合法移动。
也就是说,在我们移动小dsik之后,其他两个peg包含两个
磁盘,一个比另一个小唯一不涉及
小圆盘是把小圆盘移到大圆盘上。每
其他的移动涉及到较小的磁盘,同样的原因是
另一个数字是奇数,规则上的每一个标记都是
最短的。
上面的文字并没有进入我的脑海,即使在阅读了谷歌信息的各种参考资料之后。
请帮助我举一个简单的例子,例如磁盘n=3。Disk3最大,Disk1最小,它们需要从PegA移动到PegB。
Disk1
Disk2
Disk3
------- ------------ ------------
Peg A Peg B Peg C
最佳答案
这里首先要注意的是,在这个算法中,第一个peg被认为是最后一个peg的右边,最后一个peg被认为是第一个peg的左边。
重复应用列出的两个步骤将导致n
磁盘塔向右移动一个peg。
在n = 3
的情况下,n
是奇数,因此两个移动是:
向右移动一个销钉。
采取唯一不涉及Disk1
的合法行动。
通过重复这些步骤给出以下解决方案:Disk1
(向右移动一个栓)Disk1: PegA -> PegB
(仅法律行动不涉及Disk1
)Disk2: PegA -> PegC
(向右移动一个栓)Disk1
(仅法律行动不涉及Disk1: PegB -> PegC
)Disk1
(向右移动一个栓)Disk3: PegA -> PegB
(仅法律行动不涉及Disk1
)Disk1: PegC -> PegA
(向右移动一个栓)
当他写“与n位数字的对应关系”时,sedgewick指的是这样一个事实:在解的步骤Disk1
中移动的磁盘是对应于Disk2: PegC -> PegB
二进制表示中最低有效Disk1
位的磁盘。即对于Disk1: PegA -> PegB
:
step | bits | disk
------------------
1 | 001 | 1
2 | 010 | 2
3 | 011 | 1
4 | 100 | 3
5 | 101 | 1
6 | 110 | 2
7 | 111 | 1