Algorithm 河内塔的二元解

Algorithm 河内塔的二元解,algorithm,towers-of-hanoi,Algorithm,Towers Of Hanoi,我在读书 下面是第213页的摘录,涉及数字二进制表示中尾随零的数量 对于河内塔问题,对应关系的含义 使用n位数字是一个简单的任务算法。我们可以搬家 通过以下两个步骤将一个销钉堆放到右侧,直至完成: 如果n为奇数,则将小磁盘向右移动(如果n为偶数,则向左移动) 进行唯一合法的移动,不涉及小磁盘 也就是说,移动小dsik后,其他两个销钉包含两个 磁盘,一个比另一个小。唯一不涉及 小圆盘将把小圆盘移到大圆盘上。每一个 其他移动涉及更小的磁盘,原因与每个 另一个数字是奇数,规则上的每一个标记都是奇数 最

我在读书

下面是第213页的摘录,涉及数字二进制表示中尾随零的数量

对于河内塔问题,对应关系的含义 使用n位数字是一个简单的任务算法。我们可以搬家 通过以下两个步骤将一个销钉堆放到右侧,直至完成:

  • 如果n为奇数,则将小磁盘向右移动(如果n为偶数,则向左移动)
  • 进行唯一合法的移动,不涉及小磁盘
  • 也就是说,移动小dsik后,其他两个销钉包含两个 磁盘,一个比另一个小。唯一不涉及 小圆盘将把小圆盘移到大圆盘上。每一个 其他移动涉及更小的磁盘,原因与每个 另一个数字是奇数,规则上的每一个标记都是奇数 最短的

    上面的文字并没有进入我的脑海,即使在阅读了谷歌信息中的各种参考资料之后

    请帮我举一个简单的例子,例如磁盘N=3。Disk3是最大的,Disk1是最小的,它们需要从PegA移动到PegB

    Disk1
    Disk2
    Disk3
    -------       ------------         ------------
    Peg A            Peg B                 Peg C
    

    这个特殊问题的解决方案是:将
    Disk1
    移动到
    Peg B
    ,将
    Disk2
    移动到
    Peg C
    ,将
    Disk1
    移动到
    Peg C
    ,将
    Disk3
    移动到
    Peg B
    ,将
    Disk1
    移动到
    Peg A
    ,将
    Disk2
    移动到
    Peg B
    ,将
    移动到
    ,将
    Disk1
    移动到
    Peg B
    。完成。

    这个特殊问题的解决方案是:将
    Disk1
    移动到
    Peg B
    ,将
    Disk2
    移动到
    Peg C
    ,将
    Disk1
    移动到
    Peg C
    ,将
    Disk3
    移动到
    Peg B
    ,将
    Disk1
    移动到
    Peg A
    ,将
    Disk2
    移动到
    Peg B
    ,,将
    Disk1
    移动到
    Peg B
    。完成。

    这里要注意的第一件事是,在这个算法中,第一个peg被认为是最后一个peg的右边,最后一个peg被认为是第一个peg的左边

    反复应用列出的两个步骤将导致
    n
    磁盘塔向右移动一个销钉

    n=3
    的情况下,
    n
    是奇数,因此两个移动是:

  • Disk1
    向右移动一个销钉
  • 进行唯一不涉及
    Disk1
    的合法移动
  • 通过重复这些动作给出以下解决方案:

  • Disk1:PegA->PegB
    (向右移动
    Disk1
    一个peg)
  • Disk2:PegA->PegC
    (仅合法移动不涉及
    Disk1
  • Disk1:PegB->PegC
    (向右移动
    Disk1
    一个peg)
  • Disk3:PegA->PegB
    (仅合法移动不涉及
    Disk1
  • Disk1:PegC->PegA
    (向右移动
    Disk1
    一个peg)
  • Disk2:PegC->PegB
    (仅合法移动不涉及
    Disk1
  • Disk1:PegA->PegB
    (向右移动
    Disk1
    一个peg)
  • 当Sedgewick写“与n位数字的对应关系”时,他指的是在解决方案的步骤
    k
    中移动的磁盘是与
    k
    二进制表示中最低有效
    1
    位对应的磁盘。i、 e.对于
    n=3

    step | bits | disk
    ------------------
      1  |  001 |  1
      2  |  010 |  2
      3  |  011 |  1
      4  |  100 |  3
      5  |  101 |  1
      6  |  110 |  2
      7  |  111 |  1
    

    这里首先要注意的是,在这个算法中,第一个peg被认为是最后一个peg的右边,最后一个peg被认为是第一个peg的左边

    反复应用列出的两个步骤将导致
    n
    磁盘塔向右移动一个销钉

    n=3
    的情况下,
    n
    是奇数,因此两个移动是:

  • Disk1
    向右移动一个销钉
  • 进行唯一不涉及
    Disk1
    的合法移动
  • 通过重复这些动作给出以下解决方案:

  • Disk1:PegA->PegB
    (向右移动
    Disk1
    一个peg)
  • Disk2:PegA->PegC
    (仅合法移动不涉及
    Disk1
  • Disk1:PegB->PegC
    (向右移动
    Disk1
    一个peg)
  • Disk3:PegA->PegB
    (仅合法移动不涉及
    Disk1
  • Disk1:PegC->PegA
    (向右移动
    Disk1
    一个peg)
  • Disk2:PegC->PegB
    (仅合法移动不涉及
    Disk1
  • Disk1:PegA->PegB
    (向右移动
    Disk1
    一个peg)
  • 当Sedgewick写“与n位数字的对应关系”时,他指的是在解决方案的步骤
    k
    中移动的磁盘是与
    k
    二进制表示中最低有效
    1
    位对应的磁盘。i、 e.对于
    n=3

    step | bits | disk
    ------------------
      1  |  001 |  1
      2  |  010 |  2
      3  |  011 |  1
      4  |  100 |  3
      5  |  101 |  1
      6  |  110 |  2
      7  |  111 |  1
    

    如果这对任何人都有帮助,我在这里用python编写了一个完整的解决方案:

    #/usr/bin/env python
    #
    #解决这个问题的方法很简单,但对于N=奇数或偶数的环,方法略有不同。
    # 
    #在每次移动中,您可以执行a)或b):
    # 
    #a)将“1”值向右移动到销钉上,如果需要,将其环绕到第一个销钉上
    # 
    #b)采取其他唯一合法行动
    # 
    #然后对(2^numrings)-1重复a)或b)。
    # 
    #因此,对于N=3,您将执行上述步骤7次。
    # 
    #我前面提到的一个问题是,对于N==奇数(3,5,…),您需要重复这一点
    #整个算法再重复一次,因为上面只会将环向右移动一个销钉。
    #
    导入系统
    #
    #打印塔以便我们检查进度
    #
    def打印塔(销钉、螺母):
    npegs=长度(pegs)
    对于范围内的y(0,nrings):
    h=nrings-y
    对于范围内的x(0,npegs):
    如果len(pegs[x])>=h:
    sys.stdout.write(str(pegs[x][len(pegs[x])-h])+“”)
    其他:
    sys.stdout.wr