这样修改后的步骤消耗的时间也要比原先的少,因为A是最快的。如果Y2恰好就是Y自己(也就是说m=k+1),那么从这步以后修改前后两种情况的局面就恢复成一样了。如果m≠k+1,也就是说Y2和Y不同,那么执行第n+k+1步后,原先的局面和修改过后的局面的唯一差别在于前一种是Y2在此岸Y在彼岸,而后一种恰好相反。
这样我们有一个序列Y1,Y2,……,依次修改下去,每次修改后的步骤消耗的时间不会多于原先所需的,经过最多〔m/2〕次修改,总会有一刻某个Yt和Y相同,结束我们的这串修改。
这样我们就得到了修改后的最佳方案,它的第n步也是符合结论六的要求的。所以和我们的反证假设矛盾,和结论三的证明方式相同,我们证明了结论六。
在本节的结尾我们给出一个不那么显然的结论三的加强版。结论七:一定有这样一种符合结论二~六的最佳方案,在这个方案里,所有从彼岸到此岸的移动中,回来的这个人一定是当时在彼岸所有人中速度最快的,而且他只能是所有人中最快的或者次快的。
换句话说,所有返回此岸的任务都可以只由跑得最快和跑得次快的人来担当,所有其他人一旦到达彼岸,就留在那里,再也不回来。
我们还是使用变分法。假设结论七是错的,所有最佳方案中,都必须至少有一次需要一个跑得不是最快或次快的人回来,那么我们选取一个这样的事情发生得最晚的最佳方案。假设在第n步,有一个C从彼岸跑回了此岸,但他不是跑得最快或次快的人。
我们假设A是跑得最快的人,他所需过桥时间为a分钟,B是跑得次快的人,他需要b分钟,而C需要c分钟。我们有a<b<c。因为在第n步C从彼岸跑回了此岸,所以在那之前一定有一步,C从此岸到达彼岸,而且根据结论六,那一步一定是A和C同行,我们假设此步为第n-i步。又根据结论三,接下去一步是A回到此岸。在第n-i步和第n步间,没有有关于C的移动。考虑第n-1步:根据结论五,这一步必定有两人从此岸移动到彼岸;这两人中没有A或B,否则根据结论三,第n步回此岸来的就该是比较快的A或B;另外这两人中也没有C,因为在在第n-i步和第n步间,C不移动。所以我们根据上面的分析可以写出方案中的有关步骤:原来的方案……
第n-i步:AC→
第n-i+1步:A←……
第n-1步:YZ→(Y和Z未知,但非A、B或C)
第n步:C←
……
因为第n-i步和第n步之间没有关于C的移动,而第n-1步时A和B一定在此岸(否则根据结论三,第n步回此岸来的就该是比较快的A或B),所以我们可以把第n-i步和第n-i+1步移到第n-1步前,方案仍旧可以合理进行(换句话说,第n-i和第n-i+1步的唯一作用就是把C运送到了彼岸,但是直到第n步之前这个C并不起什么作用,所以我们可以把这次运送搬到第n-1步前而不影响其他步骤):修改后的方案……(原来第n-i步前的步骤)
……(原来处于第n-i+1和第n步间的步骤)
第n-3步:AC→(原来第n-i步)
第n-2步:A←(原来第n-i+1步)
第n-1步:YZ→(Y和Z未知,但非A、B或C)
第n步:C←
……
现在有问题的步骤都聚在了一起,所以我们可以用B来代替C,进一步修改方案修改后的方案……(原来第n-i步前的步骤)
……(原来处于第n-i+1和第n步间的步骤)
第n-3步:AB→
第n-2步:A←
第n-1步:YZ→(Y和Z未知,但非A、B或C)
第n步:B←
……
这个修改是可行的,因为根据上面的分析,进行第n-3步前B在此岸。这样得到的方案不但直到第n步还符合结论七,而且所需要的时间也比原方案短,明显违反了假设,所以我们得到矛盾,也就是说,满足结论七的最佳方案是存在的。于是结论七成立。
过桥的模式
结论七是非常强大的,事实上它描述了除了最快和次快以外所有其他旅行者的过桥模式。任取一个满足结论七的最佳方案。
假设A为最快,B为次快,而Z是任意一个其他旅行者。根据结论七,他只过一次桥,然后就留在彼岸再不回来。考虑一下和他同行的另一位旅行者,这里有两种可能性:(1)另一位旅行者还会回到此岸来。那么根据结论六,另一位一定是A。所以Z过河的模式是这样的;……
AZ→
A←
……
也就是“由A护送到对岸,A返回”,称作“模式一”。
(2)另一位旅行者也不回来了。假设这两位旅行者过桥是在第n步。
如果方案一共就是到第n步结束,那么根据结论四,在未执行第n步时,A应该在此岸,而在执行完第n步时,所有人都到了彼岸,所以那另一个旅行者就是A。所以如果出现这种情况,Z过桥的模式实质上和1)中相同,“由A护送到对岸”,只不过A不用再返回而已。
如果方案中还有第n+1步,我们考虑一下第n+1步是什么。根据结论七,这步应该是A或者B回到此岸。但是根据结论四,我们知道在第n步时A在此岸,所以第n+1不步可能是A回来,所以只能是B回来。但是B在彼岸说明第n步前已经有一步使得B过了桥。根据结论六和结论三,那一步一定是A和B同行,然后A回来。我们就可以写出Z的过桥模式(设另一位旅行者是Y,他必不同于A和B):……
AB→
A←
……
第n步:YZ→
第n+1步:B←
……
同结论七中的证明一样,我们可以修改这个方案为:……
第n-2步:AB→
第n-1步:A←
第n步:YZ→
第n+1步:B←
……
看了这个方案片断大家也许会有似曾相识的感觉。事实上,这就是本文开始四位旅行者问题中需时5分钟和8分钟的旅行者过桥的模式。这个模式是“由A和B护送到对岸,A和B返回”,称作“模式二”。结论八:一定有这样一种符合结论二~七的最佳方案,在这个方案里,所有除了最快和次快的旅行者都以上面两个模式过桥,并且再不回来。
结论
如果给定N个(速度不同)的旅行者,根据结论九我们知道有一个最佳方案,在最初的4步里用模式一或模式二把最慢的两个旅行者移动到彼岸,于是问题被约化成N-2个旅行者的形式。问题在于应该选择哪一种模式。继续假设A、B为走得最快和次快的旅行者,过桥所需时间分别为a、b;而Z、Y为走得最慢和次慢的旅行者,过桥所需时间分别为z、y。
在第六节中我们发现使用模式一移动Z和Y到彼岸所需的时间为:
z+a+y+a
使用模式二移动Z和Y到彼岸所需的时间为:b+a+z+b所以,
当2b>a+y时,应该使用模式一;
当2b<a+y时,应该使用模式二;
当2b=a+y时,使用模式一或二都可以。
上面的讨论都是在N≥4时进行的,那时最快、次快、最慢和次慢是四个不同的人。所以我们还要稍微讨论一下N=1、2、3的情况。
N=1、2是不用动脑子的,直接通通过桥就是了。
N=3也很简单,用穷举法可以发现由最快的人往返一次把其他两人送过河是最快的方法。
于是我们得到了最终结论:最佳方案构造法:以下是构造N个人(N≥1)过桥最佳方案的方法:(1)如果N=1、2,所有人直接过桥。
(2)如果N=3,由最快的人往返一次把其他两人送过河。
(3)如果N≥4,设A、B为走得最快和次快的旅行者,过桥所需时间分别为a、b;而Z、Y为走得最慢和次慢的旅行者,过桥所需时间分别为z、y。那么当2b>a+y时,使用模式一将Z和Y移动过桥;当2b<a+y时,使用模式二将Z和Y移动过桥;当2b=a+y时,使用模式一将Z和Y移动过桥。这样就使问题转变为N-2个旅行者的情形,从而递归解决之。
最后当然我们要举一个具体的例子:七个旅行者,所需过桥时间分别是1、4、5、5、5、8、9分钟。
我们假设他们顺次为A、B、C、D、E、F、G,我们注意到C、D、E的速度一样,用第二节的方法太正规也太麻烦,我们可以人为规定C速度稍稍大于D,D速度又稍稍大于E。采用结论十的方法,最快和次快的是A、B,时间为1和4;最慢和次慢的是G和F,时间为9和8。现在2*4<1+9,所以用模式二:第1步:AB→4
第2步:A←1
第3步:FG→9
第4步:B←4
现在剩下A、B、C、D、E在此岸,最快和次快的是A、B,时间为1和4;最慢和次慢的是E和D,时间为5和5。现在2*4>1+5,所以用模式一:第5步:AE→5
第6步:A←1
第7步:AD→5
第8步:A←1
现在剩下A、B、C在此岸,用N=3的办法结束:第9步:AC→5
第10步:A←1
第11步:AB→4
总的时间为:
4+1+9+4+5+1+5+1+5+1+4=40分钟虽然我一个其他的方案都没列举,我知道这个40分钟的方案必定是最佳的。