|
|
1
1
将每个节点的“可到达”节点存储为一个位掩码,并执行一个按位的、当然听起来很难在计算上击败的操作。如果这方面的主要问题是高内存使用率,那么这可能被视为内存压缩问题。 如果位掩码非常稀疏(很多是零),它们有可能压缩到更小的大小。 我想您会想要找到一个压缩库,它可以将位掩码作为流进行反压缩。这样您就可以执行按位和按位解压缩,从而避免存储完全解压缩的位掩码。 |
|
|
2
3
您要分组依据的关系不是等价关系。例如,考虑这个依赖关系图: 这里, b and c have a common dependent,and so do c and d ,but there are no common dependent between b and d 。在这种情况下,您可能希望在同一个组中具有 b、 c和 d。然而,这件事变得更加棘手: 这里, a 不依赖于 c ,因此您可能希望在单独的组中拥有 b 和 d ,现在您不需要关心 c 。但是,有一类算法将分组 b和 d together在这种情况下:algorithms which maintain grouping of all node s,and use this a s a b a s is for grouping new node's direct descendants.
其中一种算法使用a disjoint-set-structure 有效跟踪连接的节点。在我的示例中,在处理 A 之前,算法将具有节点 B , C , D , E ,and F all in the same set,so they will b e grouped together.
在这里, 乙 和 C 有一个共同的依赖者,也是 C 和 D ,但两者之间没有共同的依赖关系 乙 和 D . 在这种情况下,你可能想 B , C 和 D 在同一组中。但是,这种情况会更加棘手:
在这里, 一 不依赖 C ,所以你可能想要 B 和 D 在不同的群体中,既然你不需要关心 C . 然而,有一类算法将 乙 和 D 在本例中,一起使用:保持分组的算法 全部的 节点,并将其用作分组新节点的直接后代的基础。 其中一种算法使用 disjoint-set structure 有效跟踪连接的节点。在我的示例中,在处理之前 一 ,该算法将具有节点 乙 , C , D , e ,和 f 全部在同一组中,因此它们将被分组在一起。 以下是一个实现:
|
|
|
3
1
如果是有向非循环图,可以执行 topological sorting 对于节点,这似乎是后续步骤的良好基础。拓扑排序本身可以有效地完成。在FRP启发的库中有一些实现,例如 crosslink 或帕德平德的 flyd 此外,检查 this answer . |