最近三天(11月27~29日)看《算法谜题》,发现夜过吊桥算法。
夜过吊桥算法(night crossing suspension bridge)是动态规划和贪心法组合应用的算法。方法一,使用贪心法,则最佳策略是最小返回时间。因此,最快过桥的人每次返回。若有过桥时间是a[]={1,3,5,10,12}的五个人过桥,则最小返回时间是a[1]=1,四次返回,每次与a[2]~a[4]中的一个人过桥。则过程是:
1,3:1返回;
1,5:1返回;
1,10:1返回;
1,12。
时间=4+6+11+12=33.
方法二:动态策略划分子问题,要考虑所有子问题的组合方式,因此夜过吊桥算法是元素组合最佳策略问题。动态规划最优子问题有两个策略:最小返回时间,最大重叠时间。最大重叠时间是现在两个最大过桥时间的人a[4]和a[5]“一起”过桥。但是返回时间是
a[4],不是最佳策略,如果a[1]在对岸,则返回时间最小。因此每一次返回的并不是最快过桥的人。
则过程是: