【问题标题】:Minimum point link in 8-neighborhood8邻域中的最小点链接
【发布时间】:2017-10-26 06:18:36
【问题描述】:

这是我的问题,我有一个矩阵中的点列表,我想链接所有这些点并最小化这个覆盖。 我在 8-neighborhood 工作,并且链接也必须在点上。

例如,一种解决方案:

╔═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╗
║   ║ * ║*2 ║   ║   ║   ║   ║   ║   ║   ║
╠═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╣
║ 5*║   ║   ║   ║   ║   ║   ║   ║   ║   ║
╠═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╣
║   ║ * ║   ║   ║ 3*║   ║   ║   ║   ║   ║
╠═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╣
║   ║ * ║   ║   ║ * ║   ║   ║   ║   ║   ║
╠═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╣
║   ║   ║ * ║ * ║   ║ * ║   ║ * ║ * ║*4 ║
╠═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╣
║   ║ 1*║   ║   ║   ║   ║ 6*║   ║   ║   ║
╚═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╝

另一个:

╔═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╗
║   ║   ║*2 ║   ║   ║   ║   ║   ║   ║   ║
╠═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╣
║ 5*║ * ║   ║   ║   ║   ║   ║   ║   ║   ║
╠═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╣
║   ║   ║ * ║   ║ 3*║   ║   ║   ║   ║   ║
╠═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╣
║   ║   ║   ║ * ║   ║ * ║   ║   ║   ║   ║
╠═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╣
║   ║   ║ * ║   ║   ║   ║ * ║ * ║ * ║*4 ║
╠═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╣
║   ║ 1*║   ║   ║   ║   ║ 6*║   ║   ║   ║
╚═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╝

所以我搜索了一个算法来找到我的一组点的最小覆盖。 我在互联网上搜索,但没有找到我需要的,但类似的问题,如最小生成树、最小顶点覆盖......

一些想法将不胜感激

【问题讨论】:

  • 您的“最小”指标是什么?总路径长度(使用什么距离度量)?总加分?我想知道,因为从任何表现良好的指标来看,给定的解决方案都不是最小的。
  • 总路径长度最小,以涵盖我的所有观点。距离为 1 它是网格,所以如果我们移动到 8 邻域附近的情况下,成本是 1,所以我想找到最佳路径

标签: algorithm matrix optimization cover


【解决方案1】:

直线 Steiner 算法并不是您想要的;它主要取决于可用移动的正交性。

相反,我认为您需要 Bresenham 的线算法(正如您已经说过的)来连接具有添加的 Steiner 节点的基本属性的点:每个 Steiner 节点都有三个以 120 度角相交的边。 The node is the Fermat point of a triangle with appropriately chosen vertices (such that those vertices form a minimal triangle in the Steiner tree).

在您的示例中,您的最小三角形是节点 2、3、5;费马点 A(四舍五入到格子)就在 5 的右侧,如第二张图所示。您的连接树是节点 2、3、5、A。

下一个包含新节点的“最佳”三角形是 A、3、1。费马点 B 将与节点 2 位于同一列,并且在节点 3 下方一行。连接树现在是 1、2 , 3, 5, A, B.

扩展过程,你剩下的三角形将是 3、B、6(加点 C)和(我认为)C、6、4。然后会有少量的晶格抖动以达到最终结果(去除B 和 C 从树)。这是你的第二个例子。请注意,原始连接 AB 和 B1 可能选择了左侧一个单元;抖动需要让它们更靠近节点 3,然后从树中删除 B。

╔═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╗
║   ║   ║*2 ║   ║   ║   ║   ║   ║   ║   ║
╠═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╣
║ 5*║ A*║   ║   ║   ║   ║   ║   ║   ║   ║
╠═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╣
║   ║   ║ * ║   ║ 3*║   ║   ║   ║   ║   ║
╠═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╣
║   ║   ║ B ║ * ║ C ║ * ║   ║   ║   ║   ║
╠═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╣
║   ║   ║ * ║   ║   ║   ║ D*║ * ║ * ║*4 ║
╠═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╣
║   ║ 1*║   ║   ║   ║   ║ 6*║   ║   ║   ║
╚═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╝

【讨论】:

    【解决方案2】:

    这是Steiner tree problem 和 NP-hard。

    在您的示例中,您似乎在这里有一个 8 邻域网格,因为允许使用对角线。在 4-neighborhood 的情况下,有一个特殊的版本称为Rectilinear Steiner tree (仍然是 NP-hard)。

    您的问题似乎是图形变体中的施泰纳树示例。

    【讨论】:

    • 是的,这正是我想要的 Bresenham 线算法。谢谢你的回答。
    猜你喜欢
    • 1970-01-01
    • 2015-03-04
    • 2010-10-03
    • 1970-01-01
    • 2020-05-18
    • 2013-12-29
    • 1970-01-01
    • 1970-01-01
    • 2011-04-04
    相关资源
    最近更新 更多