我想开发一个程序时考虑到以下算法:
任务A和任务B是任务C的前身。它们都有开始日期和结束日期。 如果任务B的结束日期延迟,则任务C开始日期也将延迟。这是最简单的情况。但是,在大多数情况下,图表会越来越复杂。
我应该使用什么算法来更新每个任务的开始日期和结束日期,而不仅仅是递归检查?
由于
答案 0 :(得分:0)
您需要解决http://en.wikipedia.org/wiki/Longest_path#Acyclic_graphs_and_critical_paths中描述的问题。
在程序开始时,进行拓扑排序以建立先行任务在后续任务之前的顺序,并计算出一组初始任务计时。当任务结束日期延迟时,使用拓扑排序中的顺序检查该任务的后继者,然后检查这些后继者的后继者,依此类推。您可以保留尚未检查的可能延迟的后继列表,按原始顺序从此列表中检查最早,并在结果证明任务必须修改其结束日期时插入新的后继者。如果此列表变空,您可以在不检查图表中的所有节点的情况下完成 - 这可以告诉您没有其他节点受到单据的影响。