Подтвердить что ты не робот

Существует ли алгоритм 2D-макета для DAG, который позволяет фиксировать позиции на одной оси?

У меня есть DAG около 3.300 вершин, которые можно довольно успешно выложить dot как более или менее простое дерево (вещи усложняются, потому что вершины могут иметь более одного предшественника из совершенно другого ранга, поэтому кроссоверы часто). Каждая вершина в графе возникла в определенное время в исходном процессе, и я хочу, чтобы одна ось в макете представляла время: отношение к краю, подобное a -> v, b -> v, означает, что a и b возникли на некоторых конкретных время до v.

Есть ли алгоритм компоновки для DAG, который позволил бы мне определять позиции (или, по крайней мере, расстояния) на одной оси и придумывать оптимальную компоновку относительно кроссоверов на другом?

4b9b3361

Ответ 1

Вы можете сделать топологическую сортировку DAG чтобы отсортировать вершины таким образом, чтобы для каждого ребра x->y вершина x была раньше, чем y.

Поэтому, если у вас есть a -> v, b -> v, вы получите что-то вроде a, b, v или b, a, v.

Используя это, вы можете легко представить DAG следующим образом:

топологическая сортировка

Ответ 2

Да, как сказал Артуро-Менчака, топологическая сортировка может помочь уменьшить перекрывающееся количество ребер. Но это может быть не оптимальным. Нет хорошего алгоритма минимизации кросс-кросс. Задача для минимизации перехода NP-полная. Эвристика применяется для решения этой проблемы.

Эта ссылка StackOverflow может помочь вам: Рисование ациклических графиков: минимизация пересечения кромок?

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

Некоторые обзоры алгоритмов проверки и рисования плоских графов описаны на страницах Wiki Planar graph, Пересечение (теория графов). Библиотеки и алгоритмы для построения планарного графа описаны в вопросе StackOverflow Как проверить, является ли граф планарным графиком или нет? Например, автор в статье GA для прямых графиков сетки максимальных плоских графов использует генетические алгоритмы для линейного рисования сетки.

Хорошие описания для почти планарных графов приведены в статьях Прямолинейная гибкость планарного графика плюс грань, О перекрестном числе почти плоских графов.

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

Ответ 3

Если я правильно понял вас, вы хотите свести к минимуму количество пересечений кромок в вашем графическом макете. Если да, то ответ "Нет", потому что эта проблема доказана как NP-полная в общем случае. См. this, "Crossing Number - NP-Complete, Garey, Johnson".

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