我正在阅读有关如何实施图表的https://www.python.org/doc/essays/graphs/。问题是,我对如何以最快的方式找到某个节点的所有传入弧感到困惑。
graph = {'A': ['B', 'C'],
'B': ['C', 'D'],
'C': ['D'],
'D': ['C'],
'E': ['F'],
'F': ['C']}
我知道节点C有来自节点A,B,D,F的弧线。问题是:如何检查节点A,B,D,F而不进入密钥字典中的每个列表以查看它是否包含C.是否有更好的方法来执行此操作或更高效的图形和方法?有人可以指出我正确的方向,提前谢谢。
答案 0 :(得分:1)
只需使用set
结构
graph = {'A': {'B', 'C'}, # If you're using python 2.7+ you can initalize a set like this
'B': {'C', 'D'},
'C': {'D'},
'D': {'C'},
'E': set(['F']), # Set initialization pre-2.7
'F': set()} # Empty set initialization, can't use {}
然后,您可以检查target
事件的节点,如:
[pointsFrom for (pointsFrom, pointsTo) in graph.items() if target in pointsTo]
这将使图表中的节点数具有线性运行时间。