【发布时间】:2013-09-12 23:47:11
【问题描述】:
目前我正在阅读 Skiena 的“算法设计手册”(嗯,开始阅读)
他提出了一个他称之为“电影调度问题”的问题:
问题:电影调度问题
输入:行上 n 个区间的集合 I。
输出:相互不重叠的区间的最大子集是什么? 被我选中?
例子:(每条虚线是一部电影,你想找到一个电影数量最多的集合)
----a---
-----b---- -----c--- ---d---
-----e--- -------f---
--g-- --h--
我想解决的算法是这样的: 我可以扔掉“最坏的罪犯”(与大多数其他电影相交),直到没有最坏的罪犯(零交叉)。我看到的唯一问题是,如果有平局(比如两部不同的电影,每部都与其他 3 部电影相交),我扔掉哪一部有关系吗?
基本上,我想知道如何将这个想法变成“数学”,以及如何证明它正确/不正确。
【问题讨论】:
-
我们是在努力制作尽可能多的电影,还是尽可能地填补时间?是 6 部电影可以播放 5 小时,还是 5 部电影可以在同一时间跨度播放 6 小时?
-
我们正在努力制作最多的电影。
-
为什么输入中的某些行有多个电影(您的示例)?如果每部电影都在自己的路线上,这有关系吗?这样可以简化思考,否则给人的印象是一些电影被放在同一条线上。
-
请edit您的问题的标题,使其更具体。 “这个算法正确吗?”有什么可能的用途?当他们在这里搜索时,是给未来的读者吗?您的问题在内容上也很模糊:“我如何将这个想法变成“数学”以及如何证明它正确/不正确”并不是一个可以在这里回答的具体问题。实际上,我倾向于将其作为题外话,更适合 Programmers 作为一个理论问题,因为不涉及任何代码。
-
也是duplicate。好吧,也许不是确切的问题。但这是同一个问题和书。