首页 > 解决方案 > 贪心算法交换证明(算法设计,第 4 章,第 6E 章)

问题描述

翻阅书籍,遇到了这个问题:

6. Your friend is working as a camp counselor, and he is in charge of 
organizing activities for a set of junior-high-school-age campers. One of 
his plans is the following mini-triathalon exercise: each contestant must 
swim 20 laps of a pool, then bike 10 miles, then run 3 miles. The plan is 
to send the contestants out in a staggered fashion, via the following rule: 
the contestants must use the pool one at a time. In other words, first one 
contestant swims the 20 laps, gets out, and starts biking. As soon as this 
first person is out of the pool, a second contestant begins swimming the 
20 laps; as soon as he or she is out and starts biking, a third contestant 
begins swimming . . . and so on.) 

Each contestant has a projected swimming time (the expected time it 
will take him or her to complete the 20 laps), a projected biking time (the 
expected time it will take him or her to complete the 10 miles of bicycling), 
and a projected running time (the time it will take him or her to complete 
the 3 miles of running). Your friend wants to decide on a schedule for the 
triathalon: an order in which to sequence the starts of the contestants. 
Let’s say that the completion time of a schedule is the earliest time at 
which all contestants will be finished with all three legs of the triathalon, 
assuming they each spend exactly their projected swimming, biking, and 
running times on the three parts. (Again, note that participants can bike 
and run simultaneously, but at most one person can be in the pool at 
any time.) What’s the best order for sending people out, if one wants the 
whole competition to be over as early as possible? More precisely, give 
an efficient algorithm that produces a schedule whose completion time 
is as small as possible. 

只是摆弄数字很明显,答案是一个贪心算法,按骑车时间+跑步时间的降序排序。

我正在努力解决的是我的老师提到这是使用交换论据/证明的好习惯,但我看不出如何使用它(或其他任何东西)来证明这个答案是正确的。

这个问题在网上其他地方得到了回答(我在几个地方看到了这个变体),但据我所知,答案是错误的

注:b i /r i代表参赛者 i 的自行车/骑行时间

我们通过交换论证来证明这一点。考虑任何最优解,并假设它不使用这个顺序。那么最优解必须包含两个参赛者 i 和 j 使得 j 在 i 之后直接发送出去,但是 b i + r i < b j + r j。我们将这样的一对 (i,j) 称为反转。考虑通过交换 i 和 j 的顺序获得的解决方案。在这个交换的时间表中,j 比他/她以前完成得更早。此外,在交换的时间表中,当 j 之前退出池时, i 退出池;但由于 b i + r i < b j + r j, i 在交换的进度表中完成的时间比 j 在前一个进度表中的完成时间要快。

我的问题是粗体的,没有理由假设 i 和 j 有相同的游泳时间,因此当 j 离开便便时我不会离开游泳池;

我错了吗,这个答案在某种程度上是正确的?如果是,为什么?如果不是,正确的证明/论点会是什么样子?

标签: algorithmgreedyproof

解决方案


我同意你的观点,这个答案过度假设了你以粗体提到的内容。我只能在https://www.coursehero.com/file/9692310/HW4S12sol1/上找到此文本及其镜像。幸运的是,我们不需要这个假设来证明贪心算法在交换参数下是最优的。

为了证明这一点,我们将计算每个参赛者在每种情况下花费的时间,并表明交换只会减少ij中最后一个完成的时间。

我们可以假设 WLOG ij中的第一个从时间 0 开始。

在倒置的最佳时间表中(我先走):

选手 完成时间
一世 t oi = s i + b i + r i
j t oj = s i + s j + b j + r j

由于 b i + r i < b j + r j,很明显 t oi < t oj这意味着j在这种情况下最后完成。

在交换的时间表中(j 先行):

选手 完成时间
一世 t si = s i + s j + b i + r i
j t sj = s j + b j + r j

我们不知道这两个中的哪一个最后完成,但我们可以证明 t si < t oj和 t sj < t oj这意味着无论哪种方式,最后一个参赛者完成的时间都减少了。

因此,交换这种反转只会提高ij的最后一个参赛者的完成时间,并且将最优解继续交换为贪婪解不会导致次优解。因此贪心解是最优的。


推荐阅读