問題タブ [floyd-warshall]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
r - Rの行列演算で最短経路を計算するには?
グラフを表す隣接行列があります。
フロイドのアルゴリズムを実行して、頂点の各ペア間の最短経路を計算したいと考えています。
そして、O(N3) の複雑さでそれらを確実に繰り返すことができます。
ただし、n = 10^3 の場合、R は反復に耐えられません。そこで、行列演算でフロイド アルゴリズムを実行する方法を探しています。
追加の参照
理論的には、 MIT Isomap mat fileを参照できます。
しかし、マットを数回複製するR で「repmat」を実行する方法については、まだ混乱しています。
arrays - すべてのランクの配列を順番にマージする MPI
私は MPI が初めてで、プロセッサによって生成された配列がいくつかあります。各プロセッサは、長さが異なる 1 つの配列を生成しました。それらすべてを順番にマージして、プロセッサ 0 にのみ格納されている 1 つの配列にするにはどうすればよいですか。
例えば:
この問題を解決するのを手伝ってくれる人はいますか。読んでくれてありがとう:)
performance - Haskell での Floyd-Warshall のパフォーマンス – スペースリークの修正
Vector
うまくいけば良いパフォーマンスが得られるように、s を使用して Haskell で Floyd-Warshall の全ペア最短経路アルゴリズムの効率的な実装を書きたかったのです。
実装は非常に簡単ですが、代わりに 3 次元の |V|×|V|×|V| を使用します。前の値のみを読み取るため、2 次元ベクトルが使用されk
ます。
したがって、このアルゴリズムは実際には、2D ベクトルが渡されて新しい 2D ベクトルが生成される一連のステップにすぎません。最終的な 2D ベクトルには、すべてのノード (i,j) 間の最短パスが含まれます。
私の直感では、各ステップの前に前の 2D ベクトルが評価されていることを確認することが重要であることがわかったので、関数の引数と strictを使用BangPatterns
しました。prev
fw
foldl'
ただし、47978 個のエッジを持つ 1000 ノードのグラフでこのプログラムを実行すると、まったくうまくいきません。メモリ使用量が非常に高く、プログラムの実行に時間がかかりすぎます。プログラムは でコンパイルされましたghc -O2
。
プロファイリング用にプログラムを再構築し、反復回数を 50 に制限しました。
+RTS -p -hc
次に、 andを使用してプログラムを実行しました+RTS -p -hd
。
これは... 興味深いですが、サンクが大量に蓄積されていることを示していると思います。良くない。
わかりましたので、暗闇で数回撮影した後、実際に評価されることを確認するために を追加deepseq
しました。fw
prev
これで見た目が良くなり、一定のメモリ使用量で実際にプログラムを最後まで実行できます。議論の強打prev
が十分でなかったことは明らかです。
前のグラフとの比較のために、以下に を追加した後の 50 回の反復のメモリ使用量を示しますdeepseq
。
さて、状況は良くなりましたが、まだいくつか質問があります。
- これは、このスペース リークの正しい解決策ですか?
deepseq
a を挿入するのが少し醜いと思うのは間違っていますか? - ここでの s の使用法は
Vector
慣用的/正しいですか? 反復ごとにまったく新しいベクトルを構築しており、ガベージ コレクターが古いVector
s を削除することを期待しています。 - このアプローチでこれをより速く実行するために他にできることはありますか?
参考までに、httpgraph.txt
: //sebsauvage.net/paste/?45147f7caf8c5f29#7tiCiPovPHWRm1XNvrSb/zNl3ujF3xB3yehrxhEdVWw= をご覧ください。
ここにあるmain
:
python - Python での Floyd Warshall の実装
重み付き有向グラフに Floyd Warshall グラフ アルゴリズムを実装しようとしていますが、機能しませんでした。
後続のみの重みは 1 で、それ以外の場合は 0 です。
実装は次のようになります (ただし、実装はどこかから取得しました)。
c++ - 変更されたフロイド ウォーシャルを使用して指定されたノードを白黒で印刷する
Floyd Warshall アルゴリズムを変更することにより、ウィキペディアが提供するアプローチを読み、グラフ内の 2 つの指定された点の最短パスを印刷します。私はこれをコーディングしましたが、実際には期待される出力が得られません:
minimumDistanceMatrix[i][j]
グラフ内のすべての要素をそれぞれの重みに初期化し、行列内のすべての要素shortestPathCalculatorMatrix [i][j]
を -1 に初期化します。それで :
/li>それで :
/li>
PS:pathCityList
は、呼び出しが行われる前に空であると想定されるベクトルfindShortestPathListBetween
です。この呼び出しの最後に、このベクトルにはすべての中間ノードが含まれています。
誰かが私が間違っているかもしれない場所を指摘できますか?
algorithm - Floyd-Warshall が奇妙な方法でパスを覚えているのはなぜですか?
グラフのアルゴリズム、より具体的にはフロイド-ワーシャル アルゴリズムについて学び始めたところです。パスを再構築できるように変更されたアルゴリズムをウィキペディアで見ると、次のホップを保存するというより論理的な (私の意見では) 方法ではなく、中間ノードを保持していることに気付きました。さらに、コースブックでは、ウェイは最後までのノードによって保存されます。なぜこのようにパスを保存するのですか?
c++ - 最短経路の保存
このチュートリアルを参照しています: http://www.geeksforgeeks.org/dynamic-programming-set-16-floyd-warshall-algorithm/
著者はこれについて次のように述べています。
先行情報を別の 2D マトリックスに格納することによっても、最短パスを出力するようにソリューションを変更できます。
この前任者の情報が何であるかについて少し混乱しています。
では、後で表示するためにパスを保存するにはどうすればよいでしょうか。
graph-theory - Floyd-Warshall を使用して正のサイクルを検出する
Floyd-Warshall は (簡単に) サイクルを検出するように変更できると人々が言うのを見てきました。注: グラフに負のサイクルがないことを前提としています。アルゴリズムを変更する方法を知りたいですか? そして、なぜそれは正しいのですか?また、どのようなサイクルを検出させることができますか? 長さ k の最短、最長? -- また、アルゴリズムのどのような調整が必要ですか?
私はこの質問を読んで、この質問について考え始めました: 正の重みを持つ有向グラフで最短の長さのサイクルを見つけます
上記のリンクでは、adj の対角線を作成する理由がわかりません。matrix = INFINITY は、(i,i) を通過する最短の長さのサイクルを提供します。
最後に、このサイト: http://en.algoritmy.net/article/45708/Floyd-Warshall-algorithm は次のように述べています。
メモリが正しく機能する場合、すべてのサイクルの検出はポリ時間では実行できないため、これは間違っているように見えるため、これを理解していないと思います。私は言われていることを誤解していますか?(また、前任者のマトリックスが何を意味するのかよくわかりません。)
c# - Floyd Warshall アルゴリズム、認識されないエラー
このプログラムへの入力に問題がある。また、これらの空白の機能を埋める方法がわかりませんtextBox1_TextChanged
, textBox9_TextChanged
. Form1_Load
.また、これらは何ですか; (object sender, EventArgs e)
? 助けていただければ幸いです!これは、C# での経験が最も少ない場合に達成できる距離です。