Существуют ли какие-либо алгоритмы минимизации пересечений ребер в графе? Например, если у меня есть матрица переходов графа.

Я нашел такие методы, как попытка разместить узлы вокруг другого узла, но я хотел бы узнать некоторые другие идеи.

7
DropDropped 20 Дек 2012 в 03:41
1
Вы спрашиваете о рисовании графа - то есть об алгоритме, который даст хорошее расположение вершин (с минимальным количеством пересечений ребер и т. Д.) Для графа G(V,E) ??
 – 
Darren Engwirda
20 Дек 2012 в 04:46

1 ответ

Лучший ответ

Существует ряд хорошо зарекомендовавших себя алгоритмов / библиотек, которые были разработаны для приложений для рисования графиков, вы можете получить немного справочной информации здесь.

Для рисования неориентированных графов популярным выбором является алгоритм компоновки на основе силы, в котором ребра графа рассматриваются как пружины (силы притяжения), а вершины обрабатываются как заряженные частицы (применяя силы отталкивания). Алгоритм работает, обновляя положения вершин на основе этих сил, пока не будет достигнуто установившееся состояние. Подробнее о методах, основанных на силе, можно узнать здесь. Поскольку эти алгоритмы ищут равновесное решение, они часто приводят к псевдооптимальным макетам без особого запутывания краев.

Возможно, вам будет интересно воспользоваться одной из многих доступных библиотек для рисования графиков. Пакет Graphviz в целом довольно хорош и поддерживает ряд различных алгоритмов для различных приложений для рисования графиков.

2
Darren Engwirda 28 Дек 2012 в 04:29