确保依赖任务列表没有循环

时间:2014-02-12 15:12:40

标签: algorithm language-agnostic graph-theory

我想为任务创建一个CRUD应用程序(SQL或文档数据库):一次创建一个。任务可能取决于一个或多个其他任务。理想情况下,这必须是有向无环图。

如何强制执行此操作,当我创建新任务(或修改'依赖')时,没有循环?它很慢地将所有任务加载到内存中以遍历循环。有没有更好的方法来强制执行它们?

一种简单的方法是确保任务仅依赖于先前创建的任务。但是如果我们创建任务A,那么这会中断,然后我们创建A依赖的任务B.

1 个答案:

答案 0 :(得分:0)

在最糟糕的情况下,您肯定需要使用整个图表 - 考虑从新任务到所有其他任务的路径何时回到自身 - 如果不处理,您将无法知道这一点整个图。

如果您主要是一次添加一个任务,或者一次修改一个关系,并且图形相当稀疏(没有太多边缘),我可以想到的一个解决方案是执行{来自新任务的{3}}(可能相反,如果那将具有较小的分支因子)。如果你回到那个任务,你知道有一个循环。这可能导致只是逐个加载所需的顶点,这可能要慢很多,要么快得多,这取决于数据的存储方式(因此单个负载需要多长时间),需要多少个顶点相对于顶点的总数加载,也许还有一些其他因素。

如果您同时进行了多项更改,最好在图表上运行完整的depth-first-search