重み付けされていない大規模な循環グラフであるデータ セットがあります。サイクルは、約 5 ~ 6 パスのループで発生します。約 8000 のノードで構成され、各ノードには 1 ~ 6 (通常は約 4 ~ 5) の接続があります。私は単一ペアの最短経路計算を行っており、次のコードを実装して幅優先検索を実行しています。
from Queue import Queue
q = Queue()
parent = {}
fromNode = 'E1123'
toNode = 'A3455'
# path finding
q.put(fromNode)
parent[fromNode] = 'Root'
while not q.empty():
# get the next node and add its neighbours to queue
current = q.get()
for i in getNeighbours(current):
# note parent and only continue if not already visited
if i[0] not in parent:
parent[i[0]] = current
q.put(i[0])
# check if destination
if current == toNode:
print 'arrived at', toNode
break
上記のコードは Python 2.6 Queue モジュールを使用しています。SQL 呼び出しは高速です。
コードは正常に動作しますが、約 7 層の深さまでテストを実行するには約 20 秒かかります (2.5GHz Intel 4GB RAM OS X 10.6)。
このコードの実行時間を改善する方法についてのコメントを歓迎します。