Самый быстрый алгоритм планаризации графа

Я использую Processing для разработки системы навигации по сложным данным и процессам. В рамках этого я довольно глубоко погрузился в компоновку графов. Это все забавно, и мое мнение об алгоритмах компоновки таково: принудительное управление для слабаков (просто посмотрите на его масштаб... ха-ха), проекция собственного вектора — это круто, слои Сугиямы выглядят хорошо, но быстро терпят неудачу на графических графиках, и хотя я полагался на собственных векторах до сих пор мне нужно минимизировать пересечения ребер, чтобы действительно добраться до точки данных. Я знаю, я знаю NP-полный и т.д.

Я должен добавить, что у меня есть некоторый успех в применении упаковки xy и использовании перестановок, подобных Sugiyama, для уменьшения пересечения ребер между строками и столбцами. А именно: граф (| V | = 90, средняя степень log | V |) может перейти от 11000 пересечений -> 1500 (по заключенным в рамку собственным векторам) -> 300 путем чередования перестановок строк и столбцов для уменьшения пересечений.

Но локальные минимумы... что бы это ни было, липнет к этой отметке, и результат не так ясен, как мог бы быть. Мое исследование освещенности подсказывает мне, что я действительно хочу использовать алгоритм планаризации, подобный тому, который они используют для СБИС:

  1. Используйте BFS или что-то еще, чтобы сделать максимальный планарный подграф 1.a. Красиво расположите планарный подграф
  2. Умело добавляйте выдающиеся ребра, чтобы восстановить исходный граф

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

Большое спасибо!


person Cris Stringfellow    schedule 18.11.2011    source источник
comment
Голосую, потому что вы вернулись и прокомментировали ответ через год! :)   -  person Max Charas    schedule 14.03.2013


Ответы (2)


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

Я говорю это, потому что у моего соседа по комнате в аспирантуре была та же проблема, что и у вас. Он пытался преобразовать граф в плоскую форму, и все алгоритмы, гарантирующие минимальное пересечение ребер, были слишком медленными. Что он в конечном итоге сделал, что просто реализовал рандомизированный алгоритм. По сути, разложите граф, затем перетащите узлы, которые имеют ребра с большим количеством пересечений, и в конечном итоге вы справитесь с наихудшими группами ребер.

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

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

person Kane    schedule 18.11.2011
comment
Хорошо, это очевидно, но я не подумал об этом. Отличная идея. Я действительно попробую это завтра. . . А также попытка реализовать алгоритм планаризации Цая. - person Cris Stringfellow; 19.11.2011
comment
Я знаю, что этому уже 1 год, но эта идея сработала на удивление хорошо. Конечно, через какое-то время он застрянет, но работал чертовски хорошо... Может быть, как имитация отжига. - person Cris Stringfellow; 29.01.2013
comment
Это очень похоже на искусственный отжиг. Рада, что оказалась полезной! - person Kane; 29.01.2013

Вы уже знаете много макетов графиков, но я полагаю, что ваш вопрос, к сожалению, все еще недостаточно определен.

Вы можете очень быстро планаризировать любой граф, выполнив следующие действия: (1) произвольно расположите граф на плоскости (2) вычислите, где пересекаются ребра (3) создайте псевдовершины на пересечениях (это то, что вы в любом случае делаете это, когда используете макет на основе планарности для непланарных графов) (4) граф, расширенный новыми вершинами и разделенными ребрами, автоматически становится плоским.

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

person Antti Huima    schedule 19.11.2011
comment
На самом деле я не уверен, что ваш метод полностью описан... Как фиктивные вершины помогают распутать граф? Что, если я хочу сохранить топологию... и не добавлять новые ребра? - person Cris Stringfellow; 19.11.2011
comment
Когда граф комбинаторно непланарный, вам нужно преобразовать его в планарный, превратив пересечения ребер в дополнительные вершины. - person Antti Huima; 19.11.2011
comment
@AnttiHuima Я не думаю, что это будет настоящий ответ, настоящая проблема остается прежней: как минимизировать пересечения в вопросе и как минимизировать псевдовершины в вашем ответе. Единственная причина, по которой я не голосую против вашего ответа, заключается в том, что он может послужить хорошей отправной точкой для размышлений над реальным. - person peterh; 24.02.2017