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

时间:2012-05-17 07:09:54

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

说我有边缘

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

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

C, A, D, E, B

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

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

是否存在执行此操作的算法的名称?如果没有,那么如何实现呢?

2 个答案:

答案 0 :(得分: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或类似的任何此类算法,但看起来您的数据位置字符串有问题。

如果C接近(1)到A并且接近(1)到B并且B离{{1}太远(4)怎么办?你将如何用数据位置字符串表示它?

我现在不知道你想做什么。如果要对依赖关系进行liniarize以按正确顺序执行任务,请执行拓扑排序。

答案 1 :(得分:1)

这是改善地方的略有不同的方法:

http://ceur-ws.org/Vol-733/paper_pacher.pdf

所描述的算法似乎更接近force-directed graph drawing算法而不是拓扑排序。

您还应阅读有关内存图数据库的文章,例如imGraph