在内存中布置有向无环图以最大化数据局部性的算法

标签 algorithm graph directed-graph directed-acyclic-graphs

说我有优势

A -> C
A -> D
A -> E
B -> D
B -> E

为了最大化数据局部性,我安排 DAG 按此顺序存储在内存中(作为数组),以最小化节点与其依赖项之间的距离。

C, A, D, E, B

因此 A 到 C 的距离为 1,到 D 的距离为 1,到 E 的距离为 2。

B 到 E 的距离是 1,到 D 的距离是 2。

是否有执行此操作的算法的名称?如果没有,将如何实现?

最佳答案

您似乎想要线性化 DAG。我不知道你是否用它来解决依赖关系。 Topological_sorting看起来很熟悉你的问题。还有程序 tsort做的事情非常相似。

不过是依赖线性化。

neel@gentoo:~$ tsort
C A
D A
E A
D B
E B

C
D
E
B
A

打印任务必须执行的顺序。如果有一个循环,它可能无法工作。正如您提到的那样,它是非循环的。

我不知道是否有任何这样的算法用于 data locality ordering string 或任何类似的但是看起来你的 data locality string 有一些问题。

如果 C 接近 (1) A 并且也接近 (1) BB 距离 A 太远 (4) 您将如何使用数据位置字符串表示它?

我现在不知道你到底想做什么。如果您想线性化依赖关系以按正确顺序执行任务,请进行拓扑排序。

关于在内存中布置有向无环图以最大化数据局部性的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10631380/

相关文章:

python - networkx:在边缘绘制文本

c# - 如何使用 QuickGraph C# 呈现我的图形

java - 构建有向循环图的流畅界面?

algorithm - 列表的最大和最小元素

c++ - 如何将 remove_if 与 !函数的(不是函数的)

Python HTML实时绘图

python - 构建有向多重图 (Python)

.net - 寻找一种将大量对象加载到 .NET 中的 IDictionary 的技术

python - Python 中的 Marching Square 算法

java - Android 中的 JGraphT 实现