私は最近、有向グラフでダイアモンドを見つけるために、簡単で汚い 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()
明らかにはるかに高速なツーライナーの代わりに使用するパフォーマンス上の理由はありますか?