0

Prim のアルゴリズムを C (www.bubblellicious.es/prim.tar.gz) で実装しましたが、これをKruskal のアルゴリズムに変換する方法を考えていました。

それらは非常に似ているようですが、古いコードを新しいコードに変更する方法が想像できません。アドバイスなど頂ければ有難いです。それが簡単なのはわかっていますが、私はまだ C プログラミングの初心者です ...

4

3 に答える 3

5

Kruskal のコードをゼロから作成して、独自のソリューションでそれらを比較してみませんか? 学ぶための最良の方法。

于 2009-09-03T09:04:10.557 に答える
1

変換するには、単一のツリーではなく、一時的な出力構造としてフォレスト(つまり、最初は各ノードがツリーであるツリーのセット)が必要です。次に、各ステップで、現在接続されていないノードをツリーに追加する最も安価な頂点を見つけるのではなく、グラフで最も安価なエッジを見つけ、新しいツリーを作成する場合(つまり、以前に接続されていない2つのノードを接続する場合)、そのツリーをフォレストを作成し、ソースツリーを削除します。それ以外の場合は、エッジを破棄します。Kruskalの適切な実装は、適切なPrimの実装よりもメモリを消費しますが、時間はかかりません。

しかし、2つの違いは非常に大きいです。おそらく、間に保持できるのは、いくつかのヘルパー関数といくつかのデータ構造だけです。変換ではなく、より高レベルのビルディングブロックを使用した書き直しです。

于 2009-09-03T09:11:17.187 に答える
0

C++ に切り替えて、ブースト グラフ ライブラリ ( http://www.boost.org/ )を使用することを検討してみませんか?

両方のアルゴリズムの非常に優れた実装が含まれています。タイプセーフで高性能。kruskal_minimum_spanning_treeおよびprim_minimum_spanning_treeを参照してください。

于 2009-09-03T10:25:48.770 に答える