この記事は 木 Advent Calendar 2025 の 21 日目です。
概要
グラフ $G$ に対して、その木幅を $\mathrm{tw}(G)$ で表記します。
この記事では、以下の判定問題を解くシンプルなアルゴリズムを紹介します。
出力: $\mathrm{tw}(G) \leq 3$ か?
詳しい方は、これらの事実をご存知かもしれません。
- そもそも任意の $k$ について木幅が $k$ 以下かの判定が $O(f(k) \cdot n)$ 時間で解ける (☆)
- 有限個の木幅 $3$ 以下の禁止マイナーを確認すれば $O(n^{1+o(1)})$ 時間で解ける (☆) (★)
今回紹介するアルゴリズムはそういった強そうなものではなく、グラフが与えられたときに紙とペンで簡単に木幅が $3$ 以下か判定できる、人間にもやさしいアルゴリズムです。 [Arnborg & Proskurowski, 1986] によるアルゴリズムです。
この記事の内容はニッチなので、多少木幅に親しい読者を仮定しています。 木幅・木分解に触れたことがない場合、岡本先生の資料をおすすめします。
準備
木幅・木分解
グラフ $G = (V, E)$ の木分解 $\mathcal{T}$ は、木 $T$ と頂点集合族 $\mathcal{X} = \{X_t \subseteq V \mid t \in V(T) \}$ の組であって、以下の条件をすべて満たすものです。
- $\bigcup_{t \in V(T)} X_t = V$ である。
- 任意の辺 $\{u, v\} \in E$ について、ある $t \in V(T)$ が存在し、 $\{u, v\} \subseteq X_t$ である。
- 任意の頂点 $u \in V$ について、頂点集合 $V_u = \{t \in V(T) \mid u \in X_t\}$ は $T$ 上で連結である。すなわち、誘導部分グラフ $T[V_u]$ が連結である。
(インフォーマルですが)この記事では木 $T$ の各頂点 $t$ をバッグと呼び、 $X_t$ がその中身、のような表現をします。
木分解 $\mathcal{T}$ の幅は、バッグのサイズの最大値 $\max\{|X_t| \mid t \in V(T) \} - 1$ として定義され、グラフ $G$ の木幅 $\mathrm{tw}(G)$ は任意の木分解の幅の最小値です。
木幅・木分解の重要な性質
任意のグラフ $G$ について、これらが知られています。 folklore なので、証明は検索したら出てくると思います。
アルゴリズム
説明の都合上「木幅が $1$ 以下か?」から順に「木幅が $3$ 以下か?」まで判定するアルゴリズムを与えます。 これらを使うと $\mathrm{tw}(G) \leq 3$ だけでなく $\mathrm{tw}(G) = 3$ かの判定も可能です。
また、性質 1 から、与えられるグラフ $G$ は連結であると仮定します。 コーナーケースが面倒なので、 $n$ が十分大きい( $n > 5$ ぐらい)ことも仮定します。
木幅が $1$ 以下か?
「木幅が $1$ 以下 $\Leftrightarrow$ 森である」なので簡単に判定できますが、練習としてこれを使わずアルゴリズムを与えます。 (辺が一つもないとき木幅が $0$ になるため、「 $1$ 以下」に注意です。)
まず、与えられたグラフ $G$ に次数 $1$ 以下の頂点が存在しないときを考えます。 これは 性質 3 から $\mathrm{tw}(G) > 1$ を意味するため、即座に No と判定できます。
したがって、次数 $1$ 以下の頂点 $u \in V$ を仮定しましょう。 連結性より、実際には次数はちょうど $1$ です。 実はこのとき、 $u$ の削除が安全であることが示せます。 つまり、グラフ $G$ から $u$ (と $u$ を端点に持つ辺)を削除したグラフを $G'$ として、「 $\mathrm{tw}(G') \leq 1$ ならば $\mathrm{tw}(G) \leq 1$ 」が成り立つことが示せます。 性質 2 からその逆「 $\mathrm{tw}(G) \leq 1$ ならば $\mathrm{tw}(G') \leq 1$ 」が成り立つので、 再帰的に $\mathrm{tw}(G') \leq 1$ を判定すればよいです。
最後に「 $\mathrm{tw}(G') \leq 1$ ならば $\mathrm{tw}(G) \leq 1$ 」の部分を確認します。 幅 $1$ 以下の $G'$ の木分解 $\mathcal{T}$ を任意にとります。 グラフ $G$ において $u$ と隣接している(唯一の)頂点を $v$ とします。 このとき、 $v$ を含むバッグを $\mathcal{T}$ からとり、以下のように新たなバッグを $\mathcal{T}$ へ追加することで幅 $1$ の $G$ の木分解を得られます。
したがって、「 $\mathrm{tw}(G') \leq 1$ ならば $\mathrm{tw}(G) \leq 1$ 」が成り立ちます。
木幅が $2$ 以下か?
上述した「木幅が $1$ 以下か?」の判定アルゴリズムは、簡単に言えば以下の流れでした。
- 最小次数 $= 1$ $\rightarrow$ その頂点を削除して再帰的に解く。
- 最小次数 $\geq 2$ $\rightarrow$ No を返す。
実は、「木幅が $2$ 以下か?」も同様のアルゴリズムで解くことができます。
- 最小次数 $= 1$ $\rightarrow$ その頂点を削除して再帰的に解く。(木幅 $2$ 以下判定でも安全)
- 最小次数 $= 2$ $\rightarrow$ ここを説明します。
- 最小次数 $\geq 3$ $\rightarrow$ No を返す。
次数 $2$ の頂点 $u \in V$ を仮定しましょう。 また、 $u$ の隣接頂点 $2$ つを $v, w$ としましょう。 このとき、「$u$ を削除して(存在しなければ)$v, w$ 間に辺を張る」操作が安全となります。 よって同様に再帰的に解いていくことが可能です。
この操作は辺 $\{u, v\}$ を縮約する操作と等価なので、性質 2より操作後のグラフを $G'$ として「 $\mathrm{tw}(G) \leq 2$ ならば $\mathrm{tw}(G') \leq 2$ 」です。 したがってあとはその逆「 $\mathrm{tw}(G') \leq 2$ ならば $\mathrm{tw}(G) \leq 2$ 」を示せばよいです。
この操作における大事な点は、頂点集合 $\{v, w\}$ を $G'$ においてクリークとしたことです。 これにより、(性質 4から) $G'$ の任意の木分解に「 $\{v, w\}$ を部分集合として含むバッグ」を持つことを強制できます。 幅 $2$ 以下のグラフ $G'$ の木分解 $\mathcal{T}$ を任意にとり、 $\mathcal{T}$ から「 $\{v, w\}$ を部分集合として含むバッグ」を任意にとりましょう。 このとき、同様に以下のように新たなバッグを $\mathcal{T}$ へ追加することで幅 $2$ の $G$ の木分解を得られます。
したがって、「 $\mathrm{tw}(G') \leq 2$ ならば $\mathrm{tw}(G) \leq 2$ 」が成り立ちます。
木幅が $3$ 以下か?
木幅 $3$ においても、同様のアルゴリズムです。
- 最小次数 $= 1$ $\rightarrow$ その頂点を削除して再帰的に解く。(木幅 $3$ 以下判定でも安全)
- 最小次数 $= 2$ $\rightarrow$ 次数 $2$ の頂点の近傍をクリークとして再帰的に解く。(安全)
- 最小次数 $= 3$ $\rightarrow$ ここを説明します。
- 最小次数 $\geq 4$ $\rightarrow$ No を返す。
次数 $3$ の頂点からは様子が変わり、次数 $2$ と同様の操作が安全ではなくなります。 つまり、次数 $3$ の頂点を $u$ として、「 $N(u)$ をクリークにして $u$ を削除する」操作は一般に安全ではなくなります。 操作後のグラフの幅 $3$ 以下の木分解から元のグラフの幅 $3$ 以下の木分解を得ること自体は、同様に $N(u)$ を含むバッグを探し $u \cup N(u)$ のバッグをくっつけることで可能です。 問題は、 $N(u)$ をクリークにすることで木幅が $3$ 以下から $4$ 以上になる場合があることです。 以下の図はその一例です。 左側のグラフは木幅が $3$ ですが、右側のグラフは木幅が $4$ になっています。
しかしながら、次数 $3$ の場合は、このような安全でないケースは「 $N(u)$ の頂点が互いに隣接していない」ケースのみであることが示せます。
頂点集合 $N(u) \setminus \{v, w\}$ に含まれる唯一の頂点を $x$ とすると、辺 $\{u, x\}$ を縮約して得られるグラフは $G'$ であると観察でき、 性質 2より木幅が大きくならないためです。
このような次数 $3$ の"安全な"頂点がある限り再帰的に解いていくと残るのは、
- 最小次数が $3$ で、
- 任意の次数 $3$ の頂点 $u$ について $N(u)$ の頂点は互いに隣接していない
ケースです。 [Arnborg & Proskurowski, 1986] の貢献の一つは、以下の定理です。
次数 $3$ の頂点をヒントにすれば、愚直に探しても $O(n^3)$ 時間でそのような部分グラフを(存在すれば)見つけることができます。 存在しなければ No と判定できます。 そして実は、この見つけた部分グラフの $u_1,u_2,u_3$ に対応する頂点であれば"安全"というのが、もう一つの大きな貢献です。
したがって、最小次数が $3$ のときも、シンプルなアルゴリズムで $O(n^3)$ 時間で"安全な"頂点 $u$ が見つけられ、近傍をクリークとして再帰的に解いていくことができます。
おまけ
木幅が $4$ 以下か?
同じフレーバーの(Reduction Rule を頑張る)論文があります。
木幅が $2$ ではなく $3$ で抑えられるグラフクラスってあるんですか?
あまり知りません。 木幅が $2$ 以下になることが知られている有名なグラフクラスには、「外平面的グラフ(outerplanar graphs)」「直並列グラフ(series-parallel graphs)」などがあります。 「外1-平面的グラフ(outer 1-planar graphs)」は木幅が高々 $3$ です。 Halin Graph は木幅がちょうど $3$ らしいです。
ただ、「planar $\cap$ 3-tree」、つまり平面的かつ極大な木幅 $3$ のグラフは「Apollonian network」という名前がついていて研究されているようです。 詳しくは知りません。