Самый быстрый алгоритм для планаризации графа - PullRequest
5 голосов
/ 18 ноября 2011

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

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

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

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

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

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

Ответы [ 2 ]

3 голосов
/ 18 ноября 2011

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

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

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

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

2 голосов
/ 19 ноября 2011

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

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

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

...