C++ Boost

kruskal_minimum_spanning_tree

template <class Graph, class OutputIterator, class P, class T, class R>
void kruskal_minimum_spanning_tree(Graph& g, OutputIterator tree_edges, 
    const bgl_named_params<P, T, R>& params = all defaults);

kruskal_minimum_spanning_tree() 関数は重みを伴う無向グラフの 最小全域木 (MST) を探し出す。MST は木中の辺の重みの合計が最小化されたグラフ中 の全ての頂点を接続する辺の集合である。さらに詳しくは章 Minimum Spanning Tree Problem を見なさい。MST 中の辺は tree_edges 出力イテレータに出力される。この関数は MST を計算するために Kruskal の アルゴリズムを用いる  [18,8,27,15] 。

Kruskal のアルゴリズムは木中の各頂点単独で、かつ最小全域木 T 中には 辺がない状態で開始する。それからアルゴリズムは辺の重みが増加する順にグラフ中 の各辺を調査する。もし辺が異なった木中にある二つの頂点を接続しているなら、 アルゴリズムは二つの木を一つの木に併合し、辺を T に加える。 素集合操作の高速な実装を提供するために、“ランクによる結合”と“道の圧縮” の手続き (MAKE-SETFIND-SET、そして UNION-SET) を用いる。アルゴリズムは次のようなものである:

KRUSKAL-MST(G, w) 
  T := Ø 
  for each vertex u in V 
    MAKE-SET(DS, u) 
  end for
  for each edge (u,v) in E in order of nondecreasing weight 
    if FIND-SET(DS, u) != FIND-SET(DS, v) 
      UNION-SET(DS, u, v) 
      T := T U {(u,v)} 
  end for
  return T

Where Defined

boost/graph/kruskal_min_spanning_tree.hpp

Parameters

IN: const Graph& g
無向グラフ。グラフの型は Vertex List GraphEdge List Graph のモデルでなければならない。
IN: OutputIterator spanning_tree_edges
最小全域木の辺はこの Output Iterator に出力される。

Named Parameters

IN: weight_map(WeightMap w_map)
グラフ中の各辺の重みまたは“長さ”。WeightMap の型は Readable Property Map のモデルでなければならず、その値型は Less Than Comparable でなければならない。このマップのキー型はグラフの辺記述子型 である必要がある。
デフォルト: get(edge_weight, g)
UTIL: rank_map(RankMap r_map)
これは素集合データ構造によって使われる。RankMapRead/Write Property Map のモデルでなければならない。グラフの頂点記述子型は ランク・マップのキー型として使用できる必要がある。ランク・マップの値型は 汎整数型でなければならない。
デフォルト: サイズ num_vertices(g) の整数の std::vector から作られた iterator_property_map で、添え字マップには i_map を用いる。
UTIL: predecessor_map(PredecessorMap p_map)
これは素集合データ構造によって使われ、全域木中の先行点 (predecessors) を 格納するのに使われてはいない。全域木の先行点は全域木の辺の出力から 得ることができる。PredecessorMap の型は Read/Write Property Map のモデルでなければならない。先行点マップのキー型、値型は グラフの頂点記述子型でなければならない。
デフォルト: サイズ num_vertices(g) の頂点記述子の std::vector から作られた iterator_property_map で、添え字マップには i_map を用いる。
IN: vertex_index_map(VertexIndexMap i_map)
これは各頂点を [0, num_vertices(g)) の範囲において整数にマップする。 これはランク・マップまたは先行点マップにデフォルトが使われた時にのみ必要で ある。 VertexIndexMapReadable Property Map のモデルでなければならない。マップの値型は汎整数型でなければなら ない。グラフの頂点記述子型はマップのキー型として使用できる必要がある。
デフォルト: get(vertex_index, g)

Complexity

時間複雑性は O(E log E) である。

Example

ファイル examples/kruskal-example.cpp は Kruskal のアルゴリズムの使用例を含む。 contains an example of using Kruskal's algorithm.


Copyright © 2000-2001 Jeremy Siek, Indiana University (jsiek@osl.iu.edu)

Japanese Translation Copyright © 2003 Takashi Itou
オリジナルの、及びこの著作権表示が全ての複製の中に現れる限り、この文書の複製、利用、変更、販売そして配布を認める。このドキュメントは「あるがまま」に提供されており、いかなる明示的、暗黙的保証も行わない。また、いかなる目的に対しても、その利用が適していることを関知しない。

このドキュメントの対象: Boost Version 1.29.0
最新版ドキュメント (英語)