置換グラフ(permutation graph)を図で理解する:LIS/LDSとの関係
こんにちは、だいくすとらです (≧▽≦)
今回は 置換グラフ (permutation graph) というやつを、図でさっくり紹介します!
ABC439E問題をやっていたら「これ置換グラフでの最大独立集合を求める問題じゃない?」となったので、それを紹介するための記事です〜
0. 置換グラフってなに?(線分で表せるグラフ)
まず、置換(= 1〜n の並び替え)を 2 本の平行線の間に描きます。
- 上の段:
1,2,...,nを左から順に並べる(これは固定) - 下の段:置換
π = (π(1), π(2), ..., π(n))を左から順に並べる - 同じ数字どうしを線で結ぶ
- 線が交差したら、その 2 本に対応する頂点同士に辺を張る
この「線の交差関係」をそのままグラフにしたものが 置換グラフです。

1. 「交差する条件」は?
数字 a < b の 2 本の線分を考えます。
- 上の段では
aが左、bが右(これは固定) - 下の段で
aが左、bが右 → 上下で順番が同じ → 交差しない - 下の段で
aが右、bが左 → 上下で順番が逆 → 交差する

つまり小さい数 a が、下の段で大きい数 b より右に追いやられていたらクロスするということです。これは反転 (inversion) と呼び、以降この特性を使っていきます。
2. LIS(最長増加部分列)⇔ 最大独立集合(交差しない線の最大集合)
ここが一番嬉しさがあるところです。
下の段(置換)を左から見て、増加部分列(LIS)を取ることを考えます。
増加部分列を選ぶと、線が交差しない
増加部分列って「左から右に見たとき、値が増えていくように数字を拾う」ということなので、選んだ数字どうしについては
-
a<bなら、下の段でもaがbより左に出る
が必ず成り立ちます。すると
- 上の段でも下の段でも順番が同じ
- だから対応する線分は 交差しない
という関係になります。

交差しない集合 = グラフで「辺がない集合」
置換グラフでは「交差する ⇔ 辺がある」なので、交差しない集合は
- 選んだ頂点同士に辺が一本もない
という状態です。これはグラフ用語で 独立集合 (independent set) と呼びます。
だから、置換 π から作った置換グラフを G とすると
-
LIS(π)の長さ =Gの 最大独立集合の大きさ
になります。
3. LDS(最長減少部分列)⇔ 最大クリーク(互いに交差する線の最大集合)
今度は 減少部分列(LDS)です。
減少部分列は「左から右に見たとき、値がどんどん小さくなるように拾う」ということなので、選んだ数字どうしについては
-
a<bなのに、下の段ではbがaより左に出る
が必ず成り立ちます。つまり 順番が逆(反転) なので
- 対応する線分は必ず 交差する
になります。

置換グラフでは「交差する ⇔ 辺がある」なので、
- 選んだ頂点が全部つながってる
という状態であると言えます。これは クリーク (clique) と呼びます。よって
-
LDS(π)の長さ =Gの 最大クリークの大きさ
になります。
4. まとめ
置換 π から作る置換グラフ G では、
- 最大独立集合の大きさ →
LIS(π) - 最大クリークの大きさ →
LDS(π)
という対応が成り立ちます。
そして LIS / LDS はどちらも有名なアルゴリズムで O(n log n) で求まるので、置換グラフでは「最大独立集合」「最大クリーク」が高速に求まるというのが嬉しいポイントです!(※わざわざグラフの辺を全部作らなくても、置換をそのまま LIS/LDS すればOKです)
Discussion