Nautyアルゴリズムの概要
Nauty(No AUTomorphisms, Yes?)は、グラフ同型性(Graph Isomorphism)判定およびグラフのカノニカルラベリング(Canonical Labeling)を高速に行うためのアルゴリズムとなる。
Nautyは、グラフの構造的性質を解析するための高性能なアルゴリズムライブラリであり、以下の3つの主要機能を提供している。
1. グラフ同型性判定: Nautyは、2つのグラフが構造的に同一(同型:isomorphic)であるかどうかを高速に判定する。これにより、異なる表記でも同じ構造を持つグラフを正確に識別することが可能となる。
2. カノニカルラベリング: 任意のグラフを一意な「正準形(canonical form)」に変換する。これは、グラフを統一的に比較・保存する上で非常に有用で、例えばデータベース内の重複検出や構造の分類に活用される。
3. 自動同型群の計算: グラフの節点の間で許されるすべての置換(対称性)を列挙し、自動同型群(automorphism group)として計算する。これは、グラフの対称性解析や数理化学・組合せ最適化などの応用に重要なアプローチとなる。
このように、Nautyはグラフ構造の識別、正規化、対称性分析を効率的に実行するための強力なツールとなっている。
以下にNautyアルゴリズムの基本的な流れを示す。
- 分割の精緻化(Partition Refinement): まず、グラフのノードを構造的な特徴(次数や隣接関係など)に基づいてグループ化し、これを「セル」と呼ばれる部分集合に分ける。アルゴリズムはこの分割を繰り返し細かく精緻化していき、ノードの区別性を高めていく。
- 探索木の構築(Search Tree): 精緻化された分割に基づいて、異なるラベル付けの可能性を列挙する探索木を構築する。各ノードは特定のラベル付けの状態を表し、深さ優先的に探索が進む。
- 枝刈り(Pruning): 探索中、すでに訪れた構造と同型の構造が現れた場合は、それ以上の探索を打ち切る(枝刈り)。これにより、計算量を大幅に削減し、冗長な処理を回避する。
- カノニカルフォームへの変換: 最終的に、すべてのラベル付けの中から「もっとも小さい順序(通常は辞書順)」のラベル付けを選び、それを正準形(canonical form)として出力する。これにより、グラフの比較や格納を一意に行えるようになる。
この一連の処理により、Nautyは大規模かつ複雑なグラフに対しても、高速かつ正確に同型性や正準形を判定できるようになる。
“Nautyアルゴリズムの概要と実装例“で述べているNautyと”VF2アルゴリズムの概要と実装例“で述べているVF2はどちらもグラフ同型性判定に使われる代表的なアルゴリズムとなる。これらには、その設計思想や対応領域において以下に述べるような明確な違いがある。
- 問題設定の違い
-
Nautyは、グラフ同型性の判定に加え、カノニカルラベリングや自動同型群の計算も行う総合的なグラフ解析ツールであり、主に完全同型性に焦点を当てている。
-
一方、VF2は、グラフ同型性に加えて、部分同型(subgraph isomorphism)の探索にも対応しており、パターンマッチングなどに適している。
-
- 剪定(Pruning)手法の違い
-
Nautyは、グループ理論に基づく強力な剪定戦略を用いており、構造の対称性を活かした探索効率化が可能。
-
VF2は、状態空間ベースの探索と局所的一貫性チェックを高速に行うことで効率を確保しているが、より探索的な手法となる。
-
- カノニカルラベリングの可否
-
Nautyは、カノニカルラベリングが主目的のひとつであり、グラフの正準形生成に特化している。
-
VF2にはカノニカルラベリング機能はなく、主に同型性チェックやマッチング探索が対象となる。
-
- 属性付きグラフへの対応
-
Nautyは基本的に属性付きグラフ(ラベル付き頂点やエッジ)には対応していない。属性を考慮した解析には、Nautyの派生であるTracesの利用が推奨される。
-
一方でVF2は属性付きグラフにも対応可能で、ノードやエッジの属性を考慮した柔軟なマッチングが可能。
-
- 速度とスケーラビリティ
-
Nautyは特に小〜中規模の単純グラフに対して非常に高速であり、正準化を含む場合でも高性能。
-
VF2も一般に高速だが、属性付きグラフや複雑なマッチング条件がある場合には効率が落ちることがある。
-
以上をまとめると、正準形変換や対称性解析が必要な場合はNautyが有利であり、属性付き部分構造マッチングや柔軟なパターン照合が必要な場合はVF2が適しているものとなる。これらは、用途やデータの特性に応じて使い分けるのが最適である。
Nautyのアルゴリズムは、理論的には最悪ケースで指数時間を要するとされている。これは、グラフ同型性判定という問題自体が、現在のところNP に属するが NP完全とも Pとも判明していない困難な問題(Graph Isomorphism Problem)であるためである。
しかし、実用上は非常に高効率に動作し、特に、ノードの構造的特徴や対称性を巧みに活用した分割精緻化や枝刈り手法により、典型的なグラフ構造に対しては処理時間が大幅に短縮される。
その結果として、Nautyは現実的な計算環境でも数千〜数万ノード規模のグラフに対して同型性判定を高速に実行することが可能で、特に小〜中規模のグラフでは、ほぼ線形〜多項式時間のような実行速度を示すことも多く、実務や研究でも広く利用されている。
Nautyは、グラフ構造の同一性や対称性を高精度かつ高速に判定できるツールとして、以下のようなタスクに特に適している。
1. 多数のグラフの同型性フィルタリング: データベース内の大量のグラフ構造から、同型なものを除外しユニークな構造だけを抽出したい場合に最適。カノニカルラベリングを通じて、同型グラフを同一表現に変換し、高速な重複排除が可能となる。
2. 構造分類・生成タスク: 例えば「すべての非同型なnノードグラフを列挙」といった、構造的に異なるグラフだけを網羅的に収集するタスクにも強力。Nautyは、こうした列挙処理においても、正準形による識別を通じて重複を防ぎながら効率的に探索を行う。
3. グラフを一意なIDで識別したい場合: Nautyは、任意のグラフに対して正準形(canonical form)を与えることができるため、その形式を用いて一意な識別子(ID)を生成できます。これにより、構造ベースの検索やデータ管理において、冗長性のない識別が可能となる。
このように、Nautyは構造重視のグラフ処理タスク全般において、他の手法よりも強力なパフォーマンスと正確性を発揮し、特に、同型性の厳密な扱いが重要となる科学技術・化学情報・グラフデータベース分野などで活躍している。
関連するアルゴリズム
Nautyアルゴリズム(グラフの同型性・カノニカルラベリング判定)に関連するアルゴリズムは以下のように分類される。
1. グラフ同型性判定アルゴリズム(Graph Isomorphism)
グラフ同型性判定は、2つのグラフが構造的に同一かどうかを判断する問題であり、理論・実装ともに奥深い分野となる。以下に代表的なアルゴリズムについて述べる。
| アルゴリズム名 | 特徴 | 計算量・備考 |
|---|---|---|
| VF2 / VF3 | 状態空間探索・部分同型性にも対応 | 実用上高速・属性対応可能 |
| Ullmann’s Algorithm | 最古の探索ベース手法 | 剪定が弱く、実用では非効率 |
| Weisfeiler–Lehman(WL)テスト | ラベル伝播による近似同型性判定 | O(n log n) 程度、GNNでも利用される |
| Babai’s GIアルゴリズム(2015) | グラフ同型性が「準多項式時間で解ける」ことを示す理論的ブレイクスルー | 複雑・実装難易度高 |
2. カノニカルラベリングアルゴリズム(Canonical Labeling)
カノニカルラベリングは、任意のグラフに対して一意な構造表現(正準形)を与える手法であり、重複除去や構造識別に不可欠なものとなる。以下は主要なアルゴリズムの比較となる。
| アルゴリズム | 説明 | 備考 |
|---|---|---|
| Nauty | 最も広く使われている正準化アルゴリズム | 非常に高速。疎なグラフに強い |
| Traces | Nautyの後継。探索順序の改良で高速化 | 属性付きグラフにも対応しやすい |
| Bliss | 実用スケーラブル、グループ理論に基づく | 大規模有向グラフで強い |
| Saucy | 対称性検出に特化。SAT/SMTなどの検証用途で有名 | 正準ラベリングには不向きだが高速 |
| アルゴリズム | 説明 | 代表ツール |
|---|---|---|
| Nauty | 同型性と同時に自動同型群も計算可能 | dreadnaut コマンドで出力可能 |
| Bliss | ケイリーグラフ等で高速に自動同型群を算出 | 複数のグラフ生成処理で活躍 |
| Symmetry Breaking Predicates (SBPs) | SATソルバと併用 | 検証・モデル探索系ツールと連携 |
4. 特定分野での応用的アルゴリズム
グラフ同型性や類似性判定は、多様な分野で目的に特化した手法として応用されている。以下はその代表例となる。
| 分野 | 関連アルゴリズム・ツール | 備考 |
|---|---|---|
| 化学構造解析 | RDKit(部分構造検索:VF2系) | 同型性より部分同型性が重要 |
| ソフトウェア検証 | Symmetry Reduction + Saucy | モデル検査の状態空間削減 |
| 知識グラフ(RDF) | Semantic Graph Matching + WL | 意味論+構造を考慮した類似性評価 |
5. アルゴリズム選択ガイド(用途別)
グラフ解析では、タスクの目的に応じて最適なアルゴリズムを選ぶことが重要となる。以下に代表的な用途別の推奨手法を示す。
| タスク | 推奨アルゴリズム | 理由 |
|---|---|---|
| 厳密な同型性判定 | Nauty / Traces | 高速・正準ラベル取得可能 |
| 属性付き同型性 | VF2 / Traces | 属性・ラベルに柔軟対応 |
| 部分構造検索 | VF2 / Ullmann | パターンマイニングに有効 |
| 類似性判定(近似) | Weisfeiler–Lehman | GNNや機械学習向き |
| 対称性解析 | Nauty / Bliss / Saucy | 自動同型群の抽出・縮約用 |
応用実装例
以下に、Nautyアルゴリズムの応用実装例を示す。グラフ同型性の判定とカノニカルラベリングによるグラフの一意化を行う実践例となっている。Nauty本体はC言語で実装されているが、Pythonから使うには以下の2通りの方法がある。
方法1:SageMath(Python環境)でNautyを使う
SageMath は Nauty を内部に組み込んでおり、Pythonライクな記法でグラフ同型性やカノニカルラベリングを実行できる。
1. グラフ同型性判定の例
# SageMath環境(または Jupyter + SageMath Kernel)
G1 = Graph([(1, 2), (2, 3), (3, 1)]) # 三角形
G2 = Graph([(4, 5), (5, 6), (6, 4)]) # ラベル違いだが構造同じ
# 同型性判定(内部でNautyを使用)
print("同型ですか?", G1.is_isomorphic(G2)) # True
2. カノニカルラベリングを使ったグラフの一意表現
G = Graph([(3, 1), (1, 2), (2, 3)])
canon = G.canonical_label()
canon.show() # 構造が同じでもラベル順が統一される
方法2:nauty本体 + コマンドラインツール(labelg, dreadnaut)
以下の手順で使用する。
1. グラフ記述(graph6形式)
ファイル graph1.g6 に graph6 形式で保存:
DQK (← graph6での三角形の符号化)
2. コマンドラインで正準ラベル生成
labelg graph1.g6 -o > canon1.g6
-
labelg:Nautyツールで正準ラベルを計算 -
-o:出力を標準出力へ送信
3. 同型性チェック(複数グラフの比較)
shortg graphA.g6 graphB.g6
-
同型なグラフは重複を除いて1つだけ出力される(つまり同型性フィルタ)
応用シナリオ例
| 分野 | 内容 | Nautyの役割 |
|---|---|---|
| グラフデータベース | 重複構造の一意化・圧縮 | 正準ラベルで同型検出 |
| 科学研究(化学構造) | 分子構造同定・識別子生成 | 同型性に基づく分子ID(例:化学式正規化) |
| グラフ列挙 | 非同型グラフの全列挙 | geng + shortg |
| SAT/SMT検証 | モデルの対称性除去 | saucy や nauty で構造解析 |
| 知識グラフ | 意味ネット構造の比較・抽出 | サブ構造の同型性検出 |
応用例:非同型グラフの生成と分類(CLI)
geng 4 -c | shortg > unique_graphs.g6
-
geng 4 -c:4頂点の連結なグラフをすべて生成 -
shortg:同型グラフを1つにまとめる(Nautyが中核処理)
関連ツールまとめ
| ツール | 用途 | 出力 |
|---|---|---|
geng |
グラフ生成 | graph6 |
labelg |
カノニカルラベル生成 | graph6 |
shortg |
同型グラフの統一 | graph6 |
dreadnaut |
対話的インタフェース | カスタム処理可能 |
補足:Python × Nauty(高度な連携)
-
SageMath や
pygraphblas,igraph,Graphillionなどと連携すると、Pythonベースでも高速な正準判定が可能である。
具体的な適用事例
Nautyアルゴリズムは、以下のような実際の分野で応用されている。
1. 化学構造解析(分子グラフの同型性)
概要:
-
-
分子をグラフ(原子=ノード、結合=エッジ)として表現。
-
構造式が異なっても同じ化合物であるか(構造同型性)を判定する。
-
Nautyの役割:
-
-
分子グラフにカノニカルラベリングを付与し、構造が同じものを一意に識別。
-
異性体・異名同物の判別や、化合物データベースの重複除去に利用。
-
事例:
-
-
ChEMBL, PubChem, ChemSpider などのデータベースの前処理・正規化処理
-
InChI や Canonical SMILES の生成に類似ロジックが使われる(注:InChI自体はnautyではない)
-
2. グラフ理論・数学研究(同型なグラフの分類)
概要:
-
-
n頂点の非同型グラフの数を数える、分類する、可視化する。
-
教育・研究・論文で頻繁に用いられる。
-
Nautyの役割:
-
-
gengとshortgを使い、すべての非同型なグラフを網羅的に生成。 -
グラフ列挙・分類・可視化の前処理。
-
事例:
-
-
「n ≤ 10 の全非同型グラフの図鑑」を作成する学術論文や教材
-
Ramsey理論、彩色問題などの構造列挙
-
3. SAT/SMT モデル検査・定理証明支援(対称性削減)
概要:
-
-
モデル検査において、状態空間に存在する「構造的に同型な状態」を排除して計算量を削減。
-
Nautyの役割:
-
-
モデル状態をグラフとして表現し、状態の対称性(同型性)を検出・縮約。
-
状態空間爆発の回避に貢献。
-
事例:
-
-
NuSMV, Cadence SMV, Symmetry-Aware SAT Solver での事前処理
-
nautyやsaucyを統合して自動同型群を抽出
-
4. データベースインデックス・重複除去
概要:
-
-
グラフ構造データベース(例:知識グラフ、ソーシャルグラフ)の中で、構造的に同じエンティティを1つにまとめたい。
-
Nautyの役割:
-
-
グラフに正準ラベルを付けることで、一意なID(ハッシュ)化が可能。
-
再利用可能なグラフデータの高速照合が可能になる。
-
事例:
-
-
Neo4j に登録するエンティティ構造の事前整形
-
RDF グラフの構造正規化処理
-
研究用の構造グラフを比較可能な形式で保存
-
5. 機械学習・GNN前処理
概要:
-
-
グラフニューラルネットワーク(GNN)などにおいて、同型性のある構造を別のクラスと誤認しないようにする必要がある。
-
Nautyの役割:
-
-
同型グラフに一貫した入力順序やノードIDを与えることで、学習の安定性が向上。
-
グラフ分類タスクで同型グラフを重複として排除。
-
事例:
-
-
TUDataset や OGB (Open Graph Benchmark) における前処理
-
論文「Graph Isomorphism Networks」などでの実験
-
参考文献
1. 原典・開発者論文
-
McKay, Brendan D. (1981)
Practical Graph Isomorphism – Nautyの初出論文 -
McKay, B. D., & Piperno, A. (2014)
Practical Graph Isomorphism II – Tracesアルゴリズムを提案
2. 標準的教科書・理論書
-
Handbook of Graph Theory
著者:Jonathan Gross, Jay Yellen(CRC Press)
→ Nautyの理論背景やカノニカルラベリング手法を紹介 -
Graph Theory with Applications
著者:J. A. Bondy and U. S. R. Murty
→ 同型性の基礎理論を網羅
3. 実装・ドキュメントリソース
-
Nauty/Traces 公式サイト(Brendan McKay)
🔗 https://users.cecs.anu.edu.au/~bdm/nauty/
含まれるツール:-
geng:非同型グラフの列挙 -
shortg:同型グラフの圧縮・除去 -
labelg:カノニカルラベリング -
dreadnaut:対話型操作シェル -
Traces:属性付きグラフ対応強化版
-
-
SageMath ドキュメント(内部でNautyを利用)
🔗 Sage Graphs API
→is_isomorphic(),canonical_label()でNautyを利用
4. 応用・実験研究論文
-
Junttila, T., & Kaski, P. (2007)
Engineering an Efficient Canonical Labeling Tool
→ Blissとの比較、Nautyの実測性能分析 -
Babai, László (2016)
Graph Isomorphism in Quasipolynomial Time
→ グラフ同型性問題における理論的ブレイクスルー
5. 関連アルゴリズムとの比較
-
Bliss vs Nauty:Junttila & Kaski (2007)
-
Traces vs Nauty:McKay & Piperno (2014)
-
Saucy vs Nauty:SAT/SMTの対称性削減論文で比較
-
VF2 vs Nauty:Cordella et al. (2001), 多数のベンチマークで評価
Chinoba
Intelligence as Relationship
Research Platform
founded by
Masao Watanabe
AI Systems Architecture
Decision Trace
Human–AI Coordination
Algorithmic Governance
Related Research
この記事は Chinoba Knowledge Base の一部です。

コメント