活动选择。这样做的最佳方式是什么

时间:2013-07-07 09:19:42

标签: c# algorithm

我已经获得了一份会谈(技术会谈)清单及其各自的持续时间,我必须以最少浪费时间的方式组织这些会谈。

他们没有开始讲话的开始时间和结束时间,而且每个讲话都独立于其他人,因为任何谈话都可以随时发生。

上午会议于上午9:00开始,结束于下午12:00(午餐) 中午会议在下午1点开始,到下午4点结束

到目前为止我一直在做的事情是我按照他们的持续时间按顺序对会谈进行排序,然后将他们放入1会话中。

它的作用与我预期的o / p相同,但我不确定这是否是最佳方式。 关于我还能做些什么或在某个方向上思考的任何想法?

1 个答案:

答案 0 :(得分:2)

这是多背包问题的一个实例,您描述的算法(贪婪算法)并不总能产生最佳结果。

举个简单的例子,假设你只有一个会话,有3个小时可用。有四个会谈,一个持续2.5小时,其他每个1小时。您的算法将选择第一个谈话而没有其他任何空间,给予半小时的停机时间。但最佳解决方案当然是选择三个1小时的会谈,从而实现零停机。

与常规背包问题不同,多重背包问题从我能说的很棘手。这是一篇可能会有所启发的PDF文件(link),但是我会维护这个答案,任何有简明回答的人都可以自由编辑。