NGenerics の Prim のアルゴリズムを使用して、いくつかの頂点を接続する最小スパニング ツリーを見つけています。これは、すべての頂点が他のすべての頂点に接続されているグラフで MST を検索するようなものです。つまり、頂点よりも多くのエッジがあり、(Kruskal ではなく) Prim のアルゴリズムを使用する必要があります。Prim のアルゴリズムは、適切に実装されている場合、O(|E| + |V| log |V|) 時間の計算量を持ちます。NGenerics はよく知られているライブラリであるため、Prim のアルゴリズムの最適な実装、または少なくとも O(|V|^2) よりも優れた実装が含まれている可能性があります。
ただし、問題があり
ます。NGenerics ライブラリを使用したい場合は、グラフのすべてのエッジを NGenerics グラフ データ構造に追加する必要があります。このようなもの (これは疑似コードです):
for i = 0 to |V| - 1
for j = i + 1 to |V| - 1
graph.Add(new Edge(vertices[i], vertices[j])
ただし、コードのその部分には明らかに O(|V|^2) 時間の複雑さがあり、アルゴリズムの実装が優れているライブラリを使用するという目的に反しています。定数も違いを生むので、そうではありませんが、私のアルゴリズムが O(|V|^2) になっていることにまだイライラしています。
とにかく、私はここで何かを見逃していますか?これを O(|E| + |V| log |V|) で動作させることはできますか?