Перечисление топологических сортов DAG-метки


11

Пусть , быть ориентированный ациклический граф , и пусть - функция маркировки отображения каждой вершины с меткой в некотором конечном алфавите . Запись, А топологическая сортировка из является взаимно однозначное от к (т.е., упорядочение в последовательности) таким образом, что всякий раз , когда , то (т. Е. Если есть ребро от доλ v V λ ( v ) L n : = | V | G σ { 1 , , n } V VG=(V,E)λvVλ(v)Ln:=|V|Gσ{1,,n}VVсг - 1 ( v ) < сг - 1 ( v ' ) v v ' v v ' сг сг ( 1 ) сг ( п ) л п(v,v)Eσ1(v)<σ1(v)vvтогда происходит перед в последовательности). Метка из слово в .vvσσ(1)σ(n)Ln

Учитывая , я хотел бы перечислить метки топологических видов эффективно. В чем сложность перечисления меток топологических сортов? Конечно, так как их может быть экспоненциально много, я хочу изучить сложность как функцию от размера вывода или с точки зрения задержки. В частности, может ли перечисление выполняться с полиномиальной задержкой? (или даже постоянная задержка?)G(G,λ)G

В случае, когда все вершины имеют разные метки (или, что то же самое, вершины помечены самими собой), я знаю, что метки можно перечислять в постоянном амортизированном времени, этим результатом на перечисление линейных расширений множеств (это то же самое, что перечисление топологических видов DAG). Однако, когда вершины помечены произвольно, может случиться так, что очень большое количество топологических сортировок имеют одинаковую метку, поэтому вы не можете просто перечислить топологические сортировки и вычислить их метки, чтобы получить эффективный способ перечисления меток , В терминологии poset помеченный DAG можно рассматривать как помеченный{ 1 , , n } G ( G , λ )G{1,,n}G(G,λ) и я не смог найти результаты перечисления о них.

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

Обратите внимание, что, очевидно, легко перечислить первую метку (просто возьмите любой топологический вид). Для того, чтобы перечислить другой ярлык , чем с , вы можете продолжить, наложив , что некоторый элемент v из V получает перечисленные в некотором положении я { 1 , ... , п } , где s яА , ( v ) : попробуйте каждый V и I , а также проверить если G имеет топологический вид, где v находится в положении IssvVi{1,,n}siλ(v)viGvi, что явно можно сделать в PTIME. Но так как вы выводите все больше и больше ярлыков, я не уверен, как обобщить этот подход.

Ответы:


-1

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

Теперь для того, чтобы ограничить повторив обход из - за подобные метки, можно сравнить заходил соседи из , имеющие аналогичные метки. Рассмотрим две вершины и которые имеют одинаковых непосещенных соседей, когда обход достигает . Конечно, если сначала выбрать любой из них, то получится одно и то же дерево DFS, и, следовательно, можно избежать любого из них. u v i v j uv1,v2,...,vkuvivju

Теперь сравнение соседей всех может привести к накладным расходам на общее время, но может быть выполнено более эффективно в с использованием соответствующих данных структур. O ( n 2 ) ˜ O ( n )v1,...,vkO(n2)O~(n)


Спасибо за Ваш ответ! Однако я не понимаю, почему настройка, которую вы предлагаете в первом абзаце, была бы достаточной для того, чтобы обеспечить создание другой топологической метки сортировки после полиномиального множества шагов. Например, если все элементы имеют одинаковую метку, то для перечисления существует только одна метка топологической сортировки, но я не уверен, что понимаю, почему ваш алгоритм заметил бы это и завершился достаточно быстро? (Еще один момент: вы говорите «сосед», но график - это DAG; вы имели в виду «ребенок»?)
a3nm

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

O(n2)

Спасибо за объяснение. Однако я ищу полиномиальную оценку сложности, которая применима ко всем случаям, а не эвристику без теоретических гарантий! :)
a3nm
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.