我最近写了一个快速而肮脏的 BFS 实现,在有向图中找到菱形。BFS 循环如下所示:
while toVisit:
y = toVisit.pop()
if y in visited: return "Found diamond"
visited.add(y)
toVisit.extend(G[y])
(G
是图 - 从节点名称到其邻居列表的字典)
然后是有趣的部分:我认为这list.pop()
可能太慢了,所以我运行了一个分析器来比较这个实现的速度与 deque.pop - 并得到了一些改进。然后我将它与 进行比较y = toVisit[0]; toVisit = toVisit[1:]
,令我惊讶的是,最后一个实现实际上是最快的。
这有道理吗?是否有任何性能原因可以使用list.pop()
而不是明显更快的两线?