定向网格上选定点的最小树

时间:2018-07-27 14:54:45

标签: tree graph-theory graph-algorithm directed-graph approximation

目标是找到将选定点连接到有向网格上的目标点的最小树。该树包含的点总数最少,并且假定每个点的成本相同(没有权重)。

例如,看一下以下网格:

o -> + -> o -> *
^    ^    ^    ^
|    |    |    |
o -> + -> o -> +
^    ^    ^    ^
|    |    |    |
o -> + -> o -> o
^    ^    ^    ^
|    |    |    |
o -> o -> o -> o

目标是找到从“ +”标记的点到目标点*的最小树。 在这种情况下,解决方案是:

o -> W -> W -> *
^    ^    ^    ^
|    |    |    |
o -> W -> o -> W
^    ^    ^    ^
|    |    |    |
o -> W -> o -> o
^    ^    ^    ^
|    |    |    |
o -> o -> o -> o

我知道这个问题可能是NP难题,因为在我看来这是Steiner树的某种变体。

我正在寻找可以解决此问题的算法(如果可能,还提供代码)。欢迎使用小网格/点数的解决方案和最佳树的逼近。

编辑:不清楚在这种情况下如何使用最小生成树。让我们看下面的例子:

+ -> o -> o -> o -> o -> *
^    ^    ^    ^    ^    ^
|    |    |    |    |    |
o -> o -> + -> o -> o -> o
^    ^    ^    ^    ^    ^
|    |    |    |    |    |
o -> o -> o -> o -> o -> o

该图仅包含所选点和目标点,因为节点将具有: 从左点到目标的一条边 4条正确的边线 该图中的所有树都是MST,但只有一个是原始网格中的解决方案。这将是原始网格上两个点的路径碰撞最多的一个。

我可以找到所有的MST,然后选择一个在原始网格中具有最少唯一点的MST。不确定那是否总是正确的解决方案以及其运行时间有多复杂。

1 个答案:

答案 0 :(得分:0)

好的-这是错误的,因为它构造的树仅在需要的位置具有分支,并且您可以通过在其他点建立分支来做得更好,如您的示例所示。

我认为每棵候选树都包含选定的点,目标点和不需要的点。我认为您可以通过计算边数来计算总点数,因为N点上的树具有N-1个边。因此,我认为您可以通过找到边缘最少的候选树来最小化不需要的点的数量,而且我认为这是最小的生成树问题,如https://en.wikipedia.org/wiki/Minimum_spanning_tree中所述。