Вот задача: < /p>
[*] График слишком большой, чтобы вписаться в память о том, что нужно, если он не будет, чтобы быть вновь, не будет, если утечено, если утечено. Использование нескольких ядер ЦП. Словарь Python для смежности, но он работает медленно и попадает в пределы памяти: < /p>
Код: Выделить всё
from collections import deque
def bfs(graph, start):
visited = set()
queue = deque([start])
while queue:
node = queue.popleft()
if node not in visited:
visited.add(node)
queue.extend(graph.get(node, []))
return visited
Как я могу параллелизировать BFS/DFS в Python, чтобы ускорить обход? Должен ли я использовать многопроцестрой , comurrent.features или другой подход? />
Основные BFS с использованием встроенного набора Python , deque и dict , как показано в коде. />
[*] Я попытался использовать многопроцестройный модуль для запуска нескольких экземпляров BFS параллельно от разных отправленных точек, но координация общего состояния и сочетание результатов без условий гонки стало сложным.
[*] В целом
. Графики. /> быстро пройти график (в течение нескольких секунд) даже с миллионами узлов. < /p>
< /li>
Используйте многоядерную обработку для ускорения обезвреживания. < /p>
< /li>
эффективно управлять памятью, не сбиваясь из -за сбоев из -за ограничений Ram. /> В идеале, потоковые данные или сохраняют только части графика в памяти в любое время.>
Подробнее здесь: https://stackoverflow.com/questions/796 ... versal-alg