私は自分自身のヒープを作成し、距離を格納するためにヒープを使ってダイレクトダイクストラのアルゴリズムを試してみました。Pythonでの最適ダイレクトダイクストラの検索
私はBellman-Ford(と紙にも書かれている)との回答をクロスチェックしたので、正しく動作すると確信していますが、それは好みには遅すぎるようです。 50Kエッジと1Kのノードの入力のエッジ
def dijkstra(G,root):
###Initialize values
root.value=0
h=heap.Heap(root)
for v in G.vertices:
if v==root:
continue
v.value=float('inf')
h.insert(v)
while len(h.nodes)>1:
m=h.extractmin()
##Only works for directed graphs
for E in m.edges:
if (E.v in h.nodes) and E.v.value>m.value+E.d:
#If head of the min vrtx is in the heap
E.v.value=m.value+E.d
h.check_parent(h.nodes.index(E.v)) #percolate up
の私も頂点の値を保持するために自分自身のグラフクラスを作った/長さ/ヘッド/テールは、それは> 30秒完了するのにかかります。これはPythonで期待できる合理的な時間ですか?アルゴリズムが正しいと仮定すると、ヒープが制限要因になりますか?
(また、私は私が直接クラスのメンバーへのアクセス/修正するんだ、すなわちv.value = ...、その悪い習慣です?私は特に彼らがプライベートと宣言していないことを知っている)のための
感謝入力!
このコードが実際に動作する場合、これは[code-review](http://codereview.stackexchange.com/)に適しているかもしれませんが、最初にポリシーをお読みください。 – muddyfish
パフォーマンスを[python-グラフ](https://github.com/pmatiello/python-graph)ライブラリ –