Algorithm 确保相关任务列表没有周期

Algorithm 确保相关任务列表没有周期,algorithm,language-agnostic,graph-theory,Algorithm,Language Agnostic,Graph Theory,我想为任务创建一个CRUD应用程序(SQL或document DB):一次创建一个。任务可能依赖于一个或多个其他任务。理想情况下,这必须是一个有向无环图 当我创建一个新任务(或修改“depends-on”)时,没有周期,我如何强制执行?将所有任务加载到内存以遍历一个周期很慢。有没有更好的方法来执行它们 一种简单的方法是确保任务只能依赖于以前创建的任务。但是如果我们创建任务A,那么我们就创建了一个依赖于任务B。 在最坏的情况下,你肯定需要处理整个图-考虑当从新任务到其他任务返回到自己的路径时,如果

我想为任务创建一个CRUD应用程序(SQL或document DB):一次创建一个。任务可能依赖于一个或多个其他任务。理想情况下,这必须是一个有向无环图

当我创建一个新任务(或修改“depends-on”)时,没有周期,我如何强制执行?将所有任务加载到内存以遍历一个周期很慢。有没有更好的方法来执行它们


一种简单的方法是确保任务只能依赖于以前创建的任务。但是如果我们创建任务A,那么我们就创建了一个依赖于任务B。

在最坏的情况下,你肯定需要处理整个图-考虑当从新任务到其他任务返回到自己的路径时,如果不处理整个图,你就不能知道这一点。 如果您主要是一次添加一个任务,或者一次修改一个关系,并且图形相当稀疏(没有太多边),那么我可以想到的一个解决方案是从新任务中执行一个任务(如果分支因子较小,则可能相反)。如果你重新开始这项工作,你就会知道这是一个循环。这可能只会导致逐个加载所需的顶点,这可能会慢得多,也可能快得多,具体取决于数据的存储方式(因此单次加载需要多长时间)、相对于顶点总数需要加载多少个顶点,以及其他一些因素


如果您同时进行许多更改,则最好在图形上运行一个完整的操作。

因此,如果所有任务都不在内存中,那么它们驻留在哪里?在数据库中?db方案是什么?我喜欢以下类似问题的答案: