DAG:最小化分组节点中条目之间的距离

时间:2012-12-07 05:28:37

标签: optimization directed-acyclic-graphs

我有一个带有节点的有向非循环图,这些节点是连接到其他节点中的条目的条目列表。有点像这样:

entry     ]
entry--|  ] node 1
entry  |  ]
-----  |
entry<-|  ] node 2
entry  |  ]
-----  |
entry  |  ] node 3
entry--|  ]

节点内条目的顺序是固定的。条目存储在一个数组中,该数组具有对其链接的条目的绝对索引。每个条目最多有1个链接,每个节点至少有1个链接。 (换句话说,这是一个高度连接的图表)。该图包含大约100,000个以40,000个节点分组的条目。

我需要做的是通过重新排序节点来最小化条目之间的最大距离,以便我可以使用链接的相对索引并压缩底层数据结构。

由于压缩和性能是目标,因此添加外部数据(跳转表,列表中的特殊跳转元素)的解决方案是不可接受的。我真的需要一种重新排序节点的算法,以最小化条目之间的最大距离。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您所描述的问题是如何最小化最大距离。我认为它是NP难的,所以一个简单的解决方案不会很好。但是,您可以将其建模为ILP问题并使用一些求解器。

然后,您将M作为目标最小化。

对于所有链接M>= abs(s_i-e_i)

约束为l_is_ie_i代表链接的开始和结束条目的绝对索引。

这些条目可以根据它们所属的节点重写为s_i=n_i+c_in_i节点s_i的索引属于c_ie_i内的固定偏移量该节点(在其他条目中)。 n_i同样被重写。然后,您将设置为使用解算器

优化{{1}}