我需要将图形的边缘存储在队列中,以使入射边缘的索引之间的距离尽可能小。
有没有为此目的的算法?
答案 0 :(得分:1)
这是一个合理的算法,可以找到局部最小值。基本上你从一些任意的顺序开始,每一步都贪婪地进行局部改进,直到不再有可能进行改进。
Q
开始。 (也许一些启发式方法会有所帮助,但我认为这不太重要。)C
的当前费用Q
,这是事件边缘索引的绝对差值的总和。(edge i, edge j)
:
Cij
,这是当前订购Q
的费用,但边i
和j
切换C*
成为上面计算的最小Cij
,让i*
和j*
成为已切换的相应边C* < C
:
i*
j*
和Q
C := C*
C* >= C
),没有更多本地互换有用,我们处于当地最低限度。
Q
,费用为C
如果您有额外的计算时间,您可以使用不同的初始排序运行上述计算时间。这可能会导致不同的局部最优,你可以在所有运行中选择最好的一个。