Biorąc pod uwagę ten kod ...Python przeszukiwanie wszerz optymalizacja
import Queue
def breadthFirstSearch(graph, start, end):
q = Queue.Queue()
path = [start]
q.put(path)
while not q.empty():
path = q.get()
lastNode = path[len(path) - 1]
if lastNode == end:
return path
for linkNode in graph[lastNode]:
if linkNode not in path:
newPath = []
newPath = path + [linkNode]
q.put(newPath)
Jeżeli wykres jest słownikiem reprezentującej graf skierowany, np {'stack':['overflow'], 'foo':['bar']}
czyli stos skierowaną do przepełnienia i foo jest skierowaną do baru.
Czy ta szerokość pierwszego wyszukiwania może być zoptymalizowana bardziej? Ponieważ planuję użyć go na bardzo dużym słowniku.
Chociaż prawdopodobnie nie jest to duża optymalizacja, 'Queue.Queue' jest przeznaczony do synchronizacji wielu wątków. Jeśli potrzebujesz prostej struktury danych kolejek, użyj zamiast niej 'collections.deque' i unikaj narzutu synchronizacji. – Blckknght
Kiedy używam tego, otrzymuję inną odpowiedź, nie wiem dlaczego ... – Ogen