将图形存储在队列中,相邻边缘之间的距离最小

时间:2018-04-20 08:47:43

标签: algorithm graph queue

我需要将图形的边缘存储在队列中,以使入射边缘的索引之间的距离尽可能小。

有没有为此目的的算法?

1 个答案:

答案 0 :(得分:1)

这是一个合理的算法,可以找到局部最小值。基本上你从一些任意的顺序开始,每一步都贪婪地进行局部改进,直到不再有可能进行改进。

  1. 从边缘的任意排序Q开始。 (也许一些启发式方法会有所帮助,但我认为这不太重要。)
  2. 计算C的当前费用Q,这是事件边缘索引的绝对差值的总和。
  3. 重复以下步骤:
    1. 对于每条(无序)边缘(edge i, edge j)
      • 计算“新费用”Cij,这是当前订购Q的费用,但边ij切换
      • 除外
    2. C*成为上面计算的最小Cij,让i*j*成为已切换的相应边
    3. 如果C* < C
      • i*
      • 中交换边j*Q
      • 更新C := C*
    4. 否则(C* >= C),没有更多本地互换有用,我们处于当地最低限度。
      • 返回当前订单Q,费用为C
  4. 如果您有额外的计算时间,您可以使用不同的初始排序运行上述计算时间。这可能会导致不同的局部最优,你可以在所有运行中选择最好的一个。