Algorithm 甘特图问题的算法/编程方法
我有6个进程P1、P2、P3、P4、P5和P6。问题中也给出了它们的开始时间和持续时间Algorithm 甘特图问题的算法/编程方法,algorithm,gantt-chart,Algorithm,Gantt Chart,我有6个进程P1、P2、P3、P4、P5和P6。问题中也给出了它们的开始时间和持续时间 process# start duration 1 1 1 2 3 1 3 0 6 4 5 2 5 5 4 6 8 1 现在我必须找出完全不重叠过程的最大数量。如果一个过程在任何时间点都不与另一个过程重叠,那么这两个过程是完全不重叠的 所以我做了一个甘特图,很容易看出答案是4。
process# start duration
1 1 1
2 3 1
3 0 6
4 5 2
5 5 4
6 8 1
现在我必须找出完全不重叠过程的最大数量。如果一个过程在任何时间点都不与另一个过程重叠,那么这两个过程是完全不重叠的
所以我做了一个甘特图,很容易看出答案是4。
P1、P2、P4和P6完全不重叠。
现在我必须写一个程序来计算这个。在甘特图上,我可以很容易地“看到”解决方案。
在我的程序的算法中,我不知道如何最小化时间复杂性:目前我正在考虑采用每个进程,并将其开始和结束时间与其他进程进行比较,但这大致使其为O(n^2)。
如果我将过程从6放大到1000,O(n^2)将花费大量时间
有没有标准的方法来解决这些问题?我的意思是,像甘特图这样的问题很容易被可视化?否则,我该如何改进该算法,有什么建议吗?您可以采用不同的方法来找到解决方案,以下是一些没有特定顺序的方法
- 这已经是网络上的解决方案了吗
- 这可能是一个图形问题吗
- 这可能是一个动态规划问题吗
- 我知道用于此类问题的数据结构吗
是的,也许可以用它来解决这个问题。恐怕这只是经验,是从与类似问题的搏斗中积累起来的。提示:一个过程越快完成,对你的目的来说就越好。我想维基百科上说这是一个强NP难问题。@Neil:有一个O(n logn)贪婪算法可以最优地解决这个问题。算法本身简单;有趣的是,为什么它产生的答案是最优的。这不是最大独立顶点集问题的同态吗?@Neil:你是说通过用间隔表示顶点和用重叠表示边来将is实例转化为这个问题的实例吗?不可能以这种方式表示每个IS实例。例如,假设我们的IS实例由5个顶点a、b、c、d、e和边ab、bc、cd、de组成。有两种方法来表示这一点:a、c、e按该顺序是不相交的间隔(b、d按该顺序是不相交的间隔),或镜像(e、c、a)。如果我们再添加一个顶点f和边af和ef,就无法表示问题。