您的位置:首页 > 其它

活动安排问题

2010-10-13 19:15 344 查看
重新考虑讲稿中活动安排问题。不同的是,我们有两个礼堂可供使用。我们把问题重新定义一下。假设我们有n 个活动,a1,a2, …, an,申请使用大礼堂。每个活动ai (1 £ i £ n) 有一个固定的开始时间si和一个结束时间fi,0 £ si < fi < ¥。我们有两个礼堂,H-1和H-2,可供使用,都从t = 0开始。安排在同一礼堂的活动必须两两兼容。请设计一个O(nlgn)的贪心法的算法来找出最佳的活动调度计划使得总共被安排的活动数最大。
解:
解题的思路和解一个礼堂的问题相同。我们先把n 个活动按它们的完成时间排序,使f1 £ f2 £ … £fn。然后从第一个活动开始,逐个检查,并作出决定如何安排。我们用变量Available-Time-1记录礼堂H-1目前的可用时刻。也就是说,下一个活动只能安排在时刻Available-Time-1之后。同理,我们用变量Available-Time-2记录礼堂H-2目前的可用时刻。开始时,Available-Time-1= Available-Time-2 = 0。从第一个活动开始,对每个活动ai,(1 £ i £ n) 逐个作出决定的规则如下:(假设Available-Time-1 ³ Available-Time-2,否则对称处理。)
(1) 如果Available-Time-1£ si,那么把ai安排在H-1,并更新Available-Time-1为fi 。
(2) 如果Available-Time-2 £ si < Available-Time-1,那么把ai安排在H-2,并更新Available-Time-2为fi 。
(3) 如果si < Available-Time-2,则丢弃不安排。
下面是伪码。正确性证明随后。

Two-hall-schedule (A[1..n], S1, S2)

Available-Time-1¬ Available-Time-2 ¬ 0

S1 ¬ S2 ¬ F

Sort activities such that f1 £ f2 £ … £fn //按完成时间排序

for i ¬1 to n do

5. if Available-Time-1 ³ Available-Time-2
6. then if Available-Time-1£ si

then { S1 ¬ S1 È {ai }

Available-Time-1 ¬ fi

}

10. else if Available-Time-2 £ si

then { S2 ¬ S2 È {ai }

Available-Time-2 ¬ fi

}

14. else if Available-Time-2 £ si

then { S2 ¬ S2 È {ai }

Available-Time-2 ¬ fi

}

18. else if Available-Time-1 £ si

then { S1 ¬ S1 È {ai }

Available-Time-1 ¬ fi

}

End

正确性证明

我们用归纳证明,有一个最优解和上述算法得到的解完全相同。
归纳基础。
我们证明 a1一定会被某个最优解选中。如果不是,那么假定ak 是最优解在H-1中有最小完成时间的活动。我们可以用a1换走ak。所得的解仍然最优。如果最优解选中了a1但安排在H-2中,那我们可以把在H-1中的所有活动与H-2中的所有活动交换,这样得到的解仍然最优且a1在H-1中。
归纳步骤。
假设到第i步为止,即算法处理完以后,有一个最优解,它对a1到ai的处理与算法完全一样。下面证明,存在一个最优解,它对a1到ai+1的处理与算法完全一样。假设有一个最优解M,它对a1到ai的处理与算法完全一样。现在考虑三种情况。
(1) si+1 < Min {Available-Time-2,Available-Time-2}
如果是这种情况,最优解不可能选中ai+1,所以它与算法处理结果一样,即丢弃之。
(2) si+1 ³ Available-Time-1 ³ Available-Time-2 (对称情况为si+1 ³ Available-Time-2 ³ Available-Time-1)
在这种情况下,如果最优解根本不取ai+1,而在H-1中安排的下一个结束最早的活动是ak,那么,我们用ai+1 换走ak所得的解仍然最优。如果最优解安排ai+1在H-2,那么因为si+1 ³ Available-Time-1 ³ Available-Time-2,我们可以把ai+1以后(包括ai+1)的安排在H-1的所有活动与安排在H-2的所有活动交換。这样得到的解仍然最优且ai+1在H-1中。这个道理图示如下。同理可证其对称情况。所以,有一个最优解,它对a1到ai+1的处理与算法完全一样。



Figure 最优解总可以把ai+1安排在H-1。

(3) Available-Time-2 £ si+1 < Available-Time-1 (对称情况为Available-Time-1 £ si+1 < Available-Time-2)
这种情况下,最优解不可能安排ai+1给H-1。如果最优解不取ai+1,而在H-2中安排的下一个结束最早的活动是ak,那么,我们用ai+1 换走ak所得的解仍然最优。所以,有一个最优解,它对a1到ai+1的处理与算法完全一样。
以上证明了算法的正确性。算法的复杂度取决于排序,所以是O(nlgn)。如果排序是事先做好,则算法有O(n)线性复杂度。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: