简化/减少图形的算法

时间:2019-03-02 02:23:08

标签: graph graph-theory graph-algorithm graph-reduction

是否有一种算法可以根据边际成本来缩短路径(并删除节点)?我不能把它写得太好,所以我希望这些图像能很好地总结一下:

I need to get from this...

...to this

1 个答案:

答案 0 :(得分:1)

您是否正在寻找开箱即用的内容或有关如何自己实现此功能的算法思路?我可以为您提供帮助。

您想要做的事情称为contraction个顶点,这些顶点具有2个邻居,即度数2

要实现此目的,请执行以下操作:

while exists vertex v with degree 2:
    - remove v and the 2 outgoing edges
    - add a new edge between the neighbours of v
    - the weight of the new edge is the sum of the weights of the deleted edge

也就是说,如果您具有图形的以下部分: u ---2--- v ---5--- w并应用收缩,您最终得到u ---7--- w

只需反复执行此操作,直到没有顶点和度2为止,就会将第一张图片中的图形转换为第二张图片中的图形。

确切的实现细节当然取决于您使用哪种数据结构在Python(或使用的任何其他语言)中表示图形。