カットヒル・マキー法


行列を扱う数学分野において、カットヒル・マキー法 (カットヒル・マッキー並べ替えとも、Cuthill–McKee algorithm, CM) は Elizabeth Cuthill と J. McKee[1] に因んで名付けられた、対称なパターンを持つ疎行列をテンプレート:仮リンクの小さいテンプレート:仮リンクの形に並べ替えるアルゴリズムである。同じアルゴリズムだが、添字が逆順となる、逆カットヒル・マキー法 (Reverse Cuthill–McKee algorithm, RCM) と呼ばれる Alan George によるアルゴリズムもある。実用上は、RCM法をガウス消去法と共に適用した場合には CM 法による並べ替えよりもフィルイン(非零要素の発生)が少くなることが知られている[2]。
カットヒル・マキー法 はグラフ理論において標準的に用いられる、幅優先探索アルゴリズムの一変種である。テンプレート:仮リンクテンプレート:Math を、外縁ノードから始め、全てのノードを被覆するまで生成する。集合 テンプレート:Math は集合 テンプレート:Math 内の全ノードの隣接頂点から生成される。 これらのノードは次数が昇順になるよう並べられる。この点のみが幅優先探索アルゴリズムとの違いである。
アルゴリズム
ある テンプレート:Math 対称行列が与えられ、この行列をグラフの隣接行列として可視化するものとする。カットヒル・マキー法は、隣接行列の帯幅を、グラフの頂点を再配列することにより減少させるアルゴリズムである。
このアルゴリズムにより、再配列された頂点の順序つき n-タプル テンプレート:Mvar が生成される。
始めに、テンプレート:仮リンク(最低次数をもつ頂点) テンプレート:Mvar を選ぶ。集合 テンプレート:Math とする。
そして、 テンプレート:Math に対して、テンプレート:Math が成り立つ限り次のステップを繰り返す。
- テンプレート:Math (テンプレート:Mvar の テンプレート:Mvar 番目の要素)の隣接集合 テンプレート:Math を構築し、テンプレート:Mvar に既に含まれる頂点を除外する
- テンプレート:Math を頂点の次数により昇順に並びかえる
- テンプレート:Math を集合 テンプレート:Mvar の末尾に追加する
言い換えれば、隣接頂点を次数が低いものから高いものへと訪れるものとして、幅優先探索に基いて頂点に番号づけを行うのである。
関連項目
参考文献
- Cuthill–McKee documentation for the Boost C++ Libraries.
- A detailed description of the Cuthill–McKee algorithm.
- symrcm MATLAB's implementation of RCM.
- reverse_cuthill_mckee RCM routine from SciPy written in Cython.