TAOCP V4.F2 格雷码(2)

TAOCP V4.F2 格雷码(2)

        九链环问题(Chinese ring puzzle)。

1、预备知识,关于异或

      若F=a0a1...an-2an-1,那么,若发生aj=1-aj (0<=j<n) 这样的变化,则   F=1-F。

2、知识浏览

 

         1、为什么类型(b)的移动,将k变成k(2j+1-1)?

            设环的状态为(an-1an-2...a1a0)2,且g-1( (an-1an-2...a1a0)2 )=(bn-1bn-2...b1b0)2=k。

     若ai=0 (i<j),且aj=1。那么,经过类型(b)的移动,an-1an-2...a1a0变成:

                                   an-1an-2...!aj+1...a1a0             ( !aj+1为aj+1取补 )

            于是,由反转公式:bj=ajaj+1...an-2an-1 知道,bj+1...b1b0 的所

有位均取补了。

 所以说:类型(b)的移动,将k变成k(2j+1-1)。

        2、若g-1( (an-1an-2...a1a0)2 )=(bn-1bn-2...b1b0)2=k,为什么最少k步且只要k步,就

以解决九链环问题?

         我们只要证明:类型(a)、(b)的移动每次能且只能将k减少1。

         首先,(a)类移动与(b)类移动是互斥的:每次只有一种移动是朝目标而去的,另一

种移动是倒退,不可取。

         当k为奇数时,(a)类移动使k减少1。

         当k为偶数时,(b)类移动使k变成k(2j+1-1)。

         k(2j+1-1)最多可以将k减少多少?

         实际上,j+1等于k中含2的幂的最高次数,也就是等于k的二进制“直尺函数”。

         因此,k(2j+1-1)最多可以将k减少1。      

            

二进制格雷码生成算法:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值