Сортировка графика так, чтобы как можно больше стрелок указывало вперед - PullRequest
0 голосов
/ 21 апреля 2009

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

Я могу придумать алгоритмы (например, продолжайте менять узлы, пока обмен не улучшит ситуацию), но я не уверен, насколько быстро они работают или достигают наилучшего решения.

Как называется и сложность этой проблемы?

Ответы [ 2 ]

2 голосов
/ 21 апреля 2009

Сортировка узлов по глубине может быть выполнена с помощью топологической сортировки . Однако это будет работать только с графами, которые не содержат циклов. Ваша проблема звучит так, как будто на графике есть циклы. Один из вариантов - найти циклы (см. Алгоритм Черепаха и Заяц , чтобы узнать, как это сделать) и разорвать цикл, записав, где вы его сломали. Затем сортируйте узлы и повторно связывайте.

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

0 голосов
/ 22 июля 2009

Подумав, я понял, что проблему можно разделить на две части:

  1. определяет самый большой ациклический подграф графа (который является NP-сложным )
  2. топологически сортируйте его (что намного проще )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...