Извлечен из здесь мы получили минимальную итеративную процедуру dfs, я называю ее минимальной, потому что вы вряд ли упростите код далее:
def iterative_dfs(graph, start, path=[]):
q = [start]
while q:
v = q.pop(0)
if v not in path:
path = path + [v]
q = graph[v] + q
return path
graph = {
'a': ['b', 'c'],
'b': ['d'],
'c': ['d'],
'd': ['e'],
'e': []
}
print(iterative_dfs(graph, 'a'))
Вот мой вопрос, как бы вы могли превратить эту подпрограмму в метод топологической сортировки, когда рутина также становится "минимальной"? Я смотрел этот видео, и идея была довольно умной, поэтому мне было интересно, можно ли применить тот же трюк к вышеуказанному коду поэтому конечный результат топологического_сортирования также становится "минимальным".
Не запрашивая версию топологической сортировки, которая не является крошечной модификацией описанной выше процедуры, я уже видел несколько из них. Вопрос не в том, "как реализовать топологическую сортировку в python", а вместо этого найти минимально возможный набор настроек вышеуказанного кода, чтобы стать topological_sort
.
ДОПОЛНИТЕЛЬНЫЕ КОММЕНТАРИИ
В оригинальной статье автор говорит:
Некоторое время назад я прочитал графовую версию Guido van Rossen, которая был обманчиво простым. Теперь я настаиваю на минимальной системе чистого питона с наименьшей сложностью. Идея состоит в том, чтобы иметь возможность исследовать алгоритм. Позже вы можете уточнить и оптимизировать код, но вероятно, захотите сделать это на компилированном языке.
Цель этого вопроса - не оптимизировать iterative_dfs
, а вместо этого придумать минимальную версию топологического_сервера, полученную из него (только для того, чтобы больше узнать о алгоритмах теории графов). На самом деле, я думаю, что более общий вопрос может быть чем-то вроде заданного набора минимальных алгоритмов, {iterative_dfs
, recursive_dfs
, iterative_bfs
, recursive_dfs
}, какими будут их топологические_разложения? Хотя это сделает вопрос более длинным/сложным, поэтому выяснение топологического_сортирования из iterative_dfs достаточно хорошее.