如何找到网络节点之间最小距离的最佳网格布局?

时间:2014-08-10 21:10:26

标签: algorithm networking grid nearest-neighbor

如果我想在2D网格上显示网络的节点,而且我想确保任意两个直接连接的节点(每个单元最多有一个节点)之间的曼哈顿距离最小,这是算法吗?

为澄清一下,让我提供一个基本的例子:

网络具有以下拓扑: A - > B - > ç

网格放置的一个解决方案就是列出彼此相邻的3个项目:

| A | B | C |

任意两个连接节点之间的距离为1个单元格。

假设另一个网络具有以下拓扑: A - > B - > C - > D - >甲

该网络的一个解决方案是: | A | B | | D | C | A和B,B和C,C和D以及D和A之间的距离均为1个单元。 B和D,A和C没有直接连接,因此它们的距离不会影响问题。

最佳排列方式是提供所有直接连接节点之间的最小和距离。

现在,如何为任意网络做到这一点?任何帮助肯定会受到赞赏。 :)

1 个答案:

答案 0 :(得分:0)

分而治之的方法可能会带来一些成果。请考虑以下算法:

如果图表的基数小于10:

1)创建一个3x3网格。将此图形的此节点放置在网格上,使距离最小化。

2)返回3x3网格

否则

1)将图形拆分为两组节点,逐个递归。每次递归都会返回一个图表,显示将图形子集作为网格布局的最佳方式。理想情况下,你会发现这个分裂的最小二分,但是that problem is NP-hard,所以也许是近似值?

2)通过创建一个网格来联合两个子图,其中两个递归调用的返回彼此相邻。您可以将递归调用的返回旋转90度而不更改它的距离总和,因此有16个(每个4个方向)方式来合并两个网格。很大,但谢天谢地。返回最小化总距离的联合网格。

显然,打破此算法的因素是跨越子网格的连接。轮换过程只能部分解决这个问题。

如果你知道你的图表是平面的,那么可能是一种最佳方法。否则,您可能会将近似值作为最佳解决方案,因为任何给定节点都没有度数> 4你必须选择至少一个邻居放置距离> = 2。

另一件需要考虑的事情是如何最佳地将< = 9节点放在3x3网格上。问题在于,根据子网格的成本,可能有许多同样最佳的方法将节点放在网格上,但是您还要确保具有相关外出边缘的节点(边缘离开此边缘)子问题)在网格的同一侧。