擅长:python、mysql、java
<p>取决于你计划采取多大的#6,以及数据集有多大,它可能是非常重要的;对我来说,它肯定有NP难全局优化的味道。。。在</p>
<p>不过,如果你说的是几十个(而不是几百个)节点,那么一个相当愚蠢的算法应该能提供足够好的性能。在</p>
<p>所以,你有两个限制:</p>
<ol>
<li>按分数对班级进行总排序;
这是灵活的。在</li>
<li>阶级冲突;这是不灵活的。在</li>
</ol>
<p>我所说的“灵活”是指你可以上间隔较大的班级(分数较低),但你不能同时上两个班。有趣的是,分数和冲突之间可能存在正相关;分数越高的班级越容易发生冲突。在</p>
<p>我第一次通过一个算法:</p>
<pre><code>selected_classes = []
classes = sorted(classes, key=lambda c: c.score)
for clas in classes:
if not clas.clashes_with(selected_classes):
selected_classes.append(clas)
</code></pre>
<p>如果课程的长度不均衡,在奇怪的时间开始等等,计算冲突可能会很尴尬。将开始时间和结束时间映射为时间“块”的简化表示(每15分钟/30分钟或任何需要的时间),可以更容易地查找不同类的开始和结束之间的重叠。在</p>