算法与数据结构-智力推广之过桥问题

  一、问题

  在漆黑的夜里,四位旅行者来到了一座狭窄而且没有护栏的桥边。如果不借助手电筒的话,大家是无论如何也不敢过桥去的。不幸的是,四个人一共只带了一只手电筒,而桥窄得只够让两个人同时过。如果各自单独过桥的话,四人所需要的时间分别是1、2、5、8分钟;而如果两人同时过桥,所需要的时间就是走得比较慢的那个人单独行动时所需的时间。问题是,如何设计一个方案,让这四人尽快过桥。

  两种局面中,手电筒都在桥的同一边(都在此岸或都在彼岸);而且在第一种局面里所有在彼岸的旅行者,在第二种局面里也都在彼岸,而且有这样的旅行者,在第一种局面中他在此岸,而第二种局面中他在彼岸。那么我们就说第二种局面“优于”第一种局面。

二、结论

结论一:如果有两种局面,第二种局面优于第一种局面,那么我们总可以用少于解决第一种局面的时间来解决第二种局面。

结论二:一定有这样一种最佳方案,在这个方案里,所有从彼岸到此岸的移动只需一个人。

结论三:一定有这样一种符合结论二的最佳方案,在这个方案里,所有从彼岸到此岸的移动中,回来的这个人一定是当时在彼岸所有人中速度最快的。

结论四:一定有这样一种符合结论二—三的最佳方案,在这个方案里,每当出现手电筒在此岸的局面时,速度最快的那个人总是在此岸。

结论五:一定有这样一种符合结论二—四的最佳方案,在这个方案里,所有从此岸到彼岸的移动都需两个人。
结论六:一定有这样一种符合结论二—五的最佳方案,在这个方案里,每次从此岸到彼岸移动两人,要么这两人里有一个是所有人中最快的那个,要么这两人到达彼岸后都再也不回来。
结论七:一定有这样一种符合结论二—六的最佳方案,在这个方案里,所有从彼岸到此岸的移动中,回来的这个人一定是当时在彼岸所有人中速度最快的,而且他只能是所有人中最快的或者次快的。

结论八:一定有这样一种符合结论二—七的最佳方案,在这个方案里,所有除了最快和次快的旅行者都以上面两个模式过桥,并且再不回来。

三、过桥模式

  假设A为最快,B为次快,而Z是任意一个其他旅行者。根据结论七,他只过一次桥,然后就留在彼岸再不回来。考虑一下和他同行的另一位旅行者,这里有两种可能性:

1) 另一位旅行者还会回到此岸来。

那么根据结论六,另一位一定是A。所以Z过河的模式是这样的;

          ……
         A Z →
          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):

          ……
          A B →
           A ←
          ……
  第n步:       Y Z →
  第n+1步:    B ←
          ……

我们可以修改这个方案为

          ……
          ……
  第n-2步:   A B →
  第n-1步:          A ←
  第n步:           Y Z →
  第n+1步:      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个旅行者的情形,从而递归解决之。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值