Compte tenu de ce code ...Python Queue.Queue et consistance cohérente?
import Queue
def breadthFirstSearch(graph, start, end):
q = Queue.Queue()
path = [start]
q.put(path)
visited = set([start])
while not q.empty():
path = q.get()
last_node = path[-1]
if last_node == end:
return path
for node in graph[last_node]:
if node not in visited:
visited.add(node)
q.put(path + [node])
Où graphique est un dictionnaire qui représente un graphe orienté, par exemple, { 'pile': [ 'débordement'], 'foo': [ 'bar']} par exemple, la pile pointe vers le débordement et foo pointe vers la barre. Pourquoi ne reçois-je pas le même résultat lorsque je remplace Queue.Queue par deque dans les collections pour augmenter l'efficacité?
from collections import deque
def breadthFirstSearch(graph, start, end):
q = deque()
path = [start]
q.append(path)
visited = set([start])
while q:
path = q.pop()
last_node = path[-1]
if last_node == end:
return path
for node in graph[last_node]:
if node not in visited:
visited.add(node)
q.append(path + [node])
Merci cela fonctionne, juste pour être sûr, en utilisant deque dans cette situation est plus efficace non? – Ogen
@Clay Oui car 'Queue' utilise lui-même' deque' (voir edit), 'Queue' a l'avantage d'être thread safe cependant – jamylak
Je ne le savais pas, merci pour l'aperçu, je peux voir l'amélioration de mon programme en utilisant deque parce que mes graphiques sont si grands. – Ogen