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'))
这是我的问题,你如何将此例程转换为一种拓扑排序方法,其中该例程也变得“最小化”?我看过这个video,这个想法非常聪明,所以我想知道是否可能将相同的技巧应用于上面的代码,以便topological_sort的最终结果也变得“最小”。不要求实现与上述例程不同的拓扑排序版本,我已经看过其中的几个。问题不是“如何在Python中实现拓扑排序”,而是找到使上述代码成为
topological_sort
所需的最小可能一组调整。附加注释:
在原始文章中,作者说:
这个问题的目标不是优化
iterative_dfs
,而是从中得出一个最小版本的topological_sort(仅为了学习更多有关图论算法)。实际上,我想一个更普遍的问题可能是给定一组最小算法{iterative_dfs
,recursive_dfs
,iterative_bfs
,recursive_dfs
},它们的topological_sort派生是什么?虽然这会使问题变得更长/复杂,但从iterative_dfs中找出topological_sort已经足够好了。
path=[]
... - user3012759path=[]
会在运行之间保留[]
的值 - 这可能会让很多人感到惊讶... 只需使用相同的输入两次运行您的代码,并观察它产生不同的结果! - user3012759path = ...
的行将新列表分配给本地变量路径并返回该变量,但是如果将来的某个人更改为path.append(v)
,它会执行“相同的操作”,您将突然获得在调用之间保留值的path
- 通常不希望在Python中将可变对象作为默认参数。 - user3012759