Rで最小全域木を計算する方法


8

N個の頂点とタプルに格納されている頂点のエッジ間の距離のグラフが与えられT1 = (d11, d12, …, d1n) to Tn = (dn1, dn2, …, dnn)ます。頂点V1から始まるこのグラフの最小全域木を見つけます。また、この生成されたツリーを移動するために必要な総移動距離を印刷します。

Example:
For N =5 
T1 = (0, 4, 5, 7, 5)
T2 = (4, 0, 6, 2, 5)
T3 = (5, 6, 0, 2, 1)
T4 = (7, 2, 2, 0, 5)
T5 = (5, 5, 1, 5, 0)

Selection of edges according to minimum distance are:
V1 -> V2 = 4
V2 -> V4 = 2
V4 -> V3 = 2
V3 -> V5 = 1

Thus, MST is V1 -> V2 -> V4 -> V3 -> V5 and the distance travelled is 9 (4+2+2+1)

文字通り、Rでn個の頂点のグラフを作成する方法についてはわかりません。

私はグーグルで検索しましたが、上記の問題への取り組み方がわかりませんでした。

私を助けてください。


igraphパッケージ、またはこの質問またはこの機能をチェックしましたか?
ブレタウフ

実際、私にはグラフがありませんでした。n個の頂点を持つグラフを作成する必要がありますか?質問と少し混同
マギー

グラフがあれば、最小全域木を計算できると思います。問題のようなシナリオを表すN頂点グラフを取得する方法は?
マギー

1
そのままでもいいのではないmst(g)でしょうmst(g, weights = E(g)$weights)か?
user20650

1
sum(E(mg)$weight)mg最小スパニングツリーグラフはどこ
ですか

回答:


4

あなたの質問はタイトルと一致していないようです-あなたはMSTではなくグラフ作成の後ですか?@ user20650が言うように、グラフを取得したら、MST自体は簡単です。

サイズnのグラフを作成するのは簡単ですが、接続されているノードとその重み(距離)については、ユーザーが知らないほど複雑なため、これは非常に基本的な図です。

すべてのノードが他のすべてのノード(グラフ全体)に接続されていると仮定すると、を使用できますmake_full_graph。そうでない場合は、どのノードが接続されているかを示すデータが必要か、ランダムグラフを使用します。

# create graph
n <- 5
g <- make_full_graph(n)

次の問題は距離です。これらの距離がどのように分布しているかについての情報は提供されていませんが、グラフに割り当てることを示すことができます。ここでは、ランダムなユニフォーム[0-1]の数値を使用します。

# number of edges in an (undirected) full graph is (n2 - n) /2 but
# it is easier to just ask the graph how many edges it has - this
# is more portable if you change from make_full_graph
n_edge <- gsize(g)
g <- set_edge_attr(g, 'weight', value=runif(n_edge))
plot(g)

ランダムグラフ

次のビットはMST自体minimum.spanning.treeです。

mst <-  minimum.spanning.tree(g)

出力mstは次のようになります。

IGRAPH dc21276 U-W- 5 4 -- Full graph
+ attr: name (g/c), loops (g/l), weight (e/n)
+ edges from dc21276:
[1] 1--4 1--5 2--3 2--5

私も距離がどのように計算されるのか知りません、それが私が混乱している理由です。私は完全な質問を投稿しました。彼らはそれだけの情報を提供しました。そして、このMSTトピックは初めてです。
マギー

それを助けることはできません。n個のノードを超えてグラフ構造に関する情報が提供されていない場合、いくつかの仮定がある場合にのみ一般的な答えを出すことができます。ランダムなグラフとエッジの長さの異なる分布を使用しても、コードは答えを出します
David_O

うん、グラフと距離の情報がないと手伝うのが難しいと知っている。その情報でuser20650私を助けました。それは十分です。
マギー

ちなみに、Rでグラフを作る方法を知ったので、あなたの答えが参考になります。ありがとうございます。
マギー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.