На самом деле нужно просто руководствоваться: Топологическая сортировка по определению дуг (из моего вопроса) - это способ упорядочения всех дуг в направленном графе, чтобы все дуги, которые вставляются в вершину, должны появляться перед тем, из этой вершины.Топологическая сортировка по дугам
ответ
Не нужно ничего менять в топологической сортировке, вы можете просто использовать его и послепродавать.
высокий уровень псевдо-код:
- запустить топологическая сортировка, пусть результирующий массив будет
arr
- создать пустой список ребер, пусть это будет
l
- для каждой вершины
v
вarr
[упорядоченной итерации] :
3.1. для каждого(v,u)
вE
:
3.1.1. добавить(v,u) to l
- возвращение
l
Преимуществом этого метода является то, вы можете использовать топологическую сортировку, как черный ящик, не изменяя его и только после процесса, чтобы получить желаемый результат.
Корректность [Эскиз доказательства]:
Так как для каждого ребра (v,u)
- u
появляется после v
в топологической сортировке, при печати, это делается с помощью v
, и, таким образом, (v,u)
печатается перед печатью любой вершины прилагается к u
.
Сложность: O(|V|+|E|)
топологическая сортировка, O(|V|+|E|)
для последующей обработки [перебор всех вершин и всех ребер].
«Традиционная» топологическая сортировка сортирует вершины, а это сортирует дуги. В противном случае принцип тот же ...
Я знаю, но когда я смотрю в топологическом алгоритме сортировки, я не понимаю, как его можно изменить для дуг ... Не хочу, чтобы вы его разрешили, но мне нужно руководствоваться – Nusha
Перейти к вики страница, которую вы передали, раздел кода операции. Drop 'insert n в L' и на шаге, говорящем, что« удалить ребро e из графика », также« вставляем ребро e в L ». Таким образом вы будете помнить дуги вместо вершин. – tchap
- 1. Топологическая сортировка по Neo4j
- 2. Топологическая сортировка по матрице инцидентов
- 3. Топологическая сортировка
- 4. Функциональная топологическая сортировка
- 5. Топологическая сортировка в DNS
- 6. Топологическая сортировка в OCaml
- 7. Топологическая сортировка в scala
- 8. Топологическая сортировка в Java
- 9. Топологическая сортировка (алгоритм Кана)
- 10. Топологическая сортировка с группировкой
- 11. Топологическая сортировка asm x86
- 12. Топологическая сортировка в Гремлине
- 13. Список сортировки по сортировке PHP - Топологическая сортировка
- 14. Топологическая сортировка с целевой функцией
- 15. Топологическая сортировка структур данных C++
- 16. Топологическая сортировка с использованием LINQ
- 17. Топологическая сортировка в линейном времени?
- 18. Топологическая сортировка базовых блоков в LLVM
- 19. Уникальная топологическая сортировка подразумевает существование гамильтоновой траектории
- 20. Топологическая сортировка, рекурсивная, с использованием генераторов
- 21. Несколько гамильтоновых путей и топологическая сортировка
- 22. C++ топологическая сортировка, дающая неверный вывод
- 23. Топологическая сортировка, но с определенным видом группировки
- 24. Топологическая сортировка с использованием Итерация вместо рекурсии
- 25. Топологическая сортировка, чтобы найти количество путей к t
- 26. Является ли топологическая сортировка попыткой сортировки вершин или ребер?
- 27. Случайная топологическая сортировка с равномерным распределением в близком линейном времени
- 28. Почему топологическая сортировка позволяет найти кратчайший путь O (V + E)
- 29. Топологическая сортировка не ведет себя так, как ожидалось
- 30. Топологическая сортировка списков, связанная с графом в Scala
Да, большой-O - это то же самое, но вам нужно сделать в два раза больше работы ... – tchap
@OndrejKupka: Действительно, константа будет выше, чем модификация топологической сортировки [хотя и не двойной, я полагаю, из-за производительности кеша] но в интересах ** инкапсулирования ** топологической сортировки. [это очень важный аспект!]. В реальных приложениях *, если вы обнаружите, что эта часть является горячей точкой *, вы, вероятно, захотите переписать ее, согласившись. – amit
Да, на самом деле не так просто копировать столько кода ни за что. – tchap