我有一个带有节点的有向非循环图,这些节点是连接到其他节点中的条目的条目列表。有点像这样:
entry ]
entry--| ] node 1
entry | ]
----- |
entry<-| ] node 2
entry | ]
----- |
entry | ] node 3
entry--| ]
节点内条目的顺序是固定的。条目存储在一个数组中,该数组具有对其链接的条目的绝对索引。每个条目最多有1个链接,每个节点至少有1个链接。 (换句话说,这是一个高度连接的图表)。该图包含大约100,000个以40,000个节点分组的条目。
我需要做的是通过重新排序节点来最小化条目之间的最大距离,以便我可以使用链接的相对索引并压缩底层数据结构。
由于压缩和性能是目标,因此添加外部数据(跳转表,列表中的特殊跳转元素)的解决方案是不可接受的。我真的需要一种重新排序节点的算法,以最小化条目之间的最大距离。有什么想法吗?
答案 0 :(得分:1)
您所描述的问题是如何最小化最大距离。我认为它是NP难的,所以一个简单的解决方案不会很好。但是,您可以将其建模为ILP问题并使用一些求解器。
然后,您将M作为目标最小化。
对于所有链接M>= abs(s_i-e_i)
,约束为l_i
。 s_i
和e_i
代表链接的开始和结束条目的绝对索引。
这些条目可以根据它们所属的节点重写为s_i=n_i+c_i
,n_i
节点s_i
的索引属于c_i
,e_i
内的固定偏移量该节点(在其他条目中)。 n_i
同样被重写。然后,您将设置为使用解算器