Алгоритм упрощения / уменьшения графика - PullRequest
0 голосов
/ 02 марта 2019

Существует ли алгоритм, который сокращает пути (и удаляет узлы) в зависимости от стоимости ребра?Я не могу выразить это словами, поэтому надеюсь, что эти изображения достаточно хорошо подытожат:

I need to get from this...

...to this

1 Ответ

0 голосов
/ 03 марта 2019

Вы ищете что-то нестандартное или алгоритмические идеи о том, как реализовать это самостоятельно?Я могу помочь вам с последним.

То, что вы хотите сделать, называется сжатие вершин, которые имеют ровно 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 (или любом другом используемом языке).

...