<pre><code>class Task:
name=''
duration=0
resources=list()
class Job:
name=''
tasks=list()
class Assignment:
task=None
resource=None
time=None
class MultipleTimeline:
assignments=list()
def enqueue(self,job):
pass
def put(self,job):
pass
def delete(self,job):
pass
def recalculate(self):
pass
</code></pre>
<p>这是朝着您所寻找的方向迈出的第一步,即用Python编写的数据模型吗?在</p>
<p>更新:</p>
<p>因此,我的更高效模型:</p>
<p>它基本上把所有任务放在一个按结束时间排序的链表中。在</p>
^{pr2}$
<p>由于<code>enqueue</code>和<code>put</code>的更新,我决定不使用树。
因为<code>put</code>它可以在时间上移动任务,所以我决定不使用绝对时间。在</p>
<p><code>FirstFreeSlot</code>不仅返回具有空闲时隙的任务,还返回其他正在运行的任务及其结束时间。在</p>
<p><code>enqueue</code>的工作原理如下:
我们通过<code>FirstFreeSlot</code>来寻找空闲时间,并在此处安排任务。
如果有足够的空间来完成下一个任务,我们也可以把它安排进去。
如果没有:看看其他正在运行的任务是否有空闲空间。
如果没有:运行<code>FirstFreeSlot</code>,参数为这个时间和正在运行的任务。在</p>
<p>改进:
如果<code>put</code>不是经常使用,并且<code>enqueue</code>是从时间零点开始的,我们可以通过在每个包含其他正在运行的任务的任务中包含dict()来跟踪重叠的任务。然后,还可以很容易地为每个资源保留一个list(),其中包含按endtime排序的该资源的绝对时间的计划任务。只包括那些时间间隔比以前大的任务。现在我们可以更容易地找到一个空位。在</p>
<p>问题:
此时是否需要执行<code>put</code>计划的任务?
如果是:如果要按put计划的另一个任务重叠,该怎么办?
所有资源执行任务的速度都一样快吗?在</p>