Вам не нужно явно создавать граф для использования алгоритма топологической сортировки.
Пусть S
будет набором элементов, которые вы хотите отсортировать, и существует частичный порядок в S
. Пусть used
будет словарём, который отображает каждый элемент из S
в логическое значение (false
по умолчанию), которое будет true
, когда мы посетим «узел» с этим элементом. Пусть stack
будет стеком элементов из S
(по умолчанию пусто).
Определите метод dfs(x)
(x
является элементом S
), который выполняет следующие действия:
Затем:
После этого l oop, элементы в stack
будут упорядочены (первый извлекаемый элемент из stack
минимальный ( не обязательно минимальный ), последний элемент является максимальным (не обязательно максимальным)).
Этот алгоритм, очевидно, работает в O (n ^ 2), потому что это все еще топологическая сортировка, просто без явного создания графа. * 10 84 *
(*): Подобно топологической сортировке, обрабатываются только ребра, которые go от x
до y
, и не обрабатываются случаи, когда ребро переходит от y
до x
или ребро вообще отсутствует этот алгоритм обрабатывает только отношения «меньше или равно».