SlideShare a Scribd company logo
指数時間アルゴリズム入門



   岩田 陽一 (東京大学 M1)
     JOI 春合宿 2012
自己紹介


 TopCoder: ◎wata
  TCO2010Marathon優勝など   Twitter: @wata_orz



 東京大学情報理工学系研究科コンピュータ科学専攻
  理論計算機科学 (アルゴリズムの理論的な解析とか)



        プログラミングコンテスト
        チャレンジブック


                                             2
本日の内容
 NP困難問題を解くためのアルゴリズムを扱います

                           𝑂𝑃𝑇 𝐼 ≤ 𝐴 𝐼 ≤ 𝑐𝑂𝑃𝑇(𝐼)

                           近似アルゴリズム


ヒューリスティック                                          𝑓 𝑘 𝑝 𝑛

                                           FPT アルゴリズム

  max⁡ 𝑐𝑥|𝐴𝑥 ≤ 𝑏, 𝑥: 整数}
     {
                                                    𝑂∗ 𝑐 𝑛
       整数計画                          厳密指数時間アルゴリズム


                                                             3
効率的な指数時間アルゴリズム
 何の指数?
   頂点数? 辺の数? それとも…
   • 2 𝐸 のアルゴリズムはまず役に立たないが,2 𝑉 のアル
     ゴリズムならコンテストでもよく出題されている
   • 入力サイズとは別のパラメータに関してのみ指数である
     ような場合もある (FPTアルゴリズム)
 指数の底は?
              𝑛
 2
      𝑛 と2 では解けるサイズが倍違う
             2
       100
   1.2    < 1004
 コンテストに出うるものに絞って解説

                                     4
内容一覧
 何の指数?
    動的計画法,準指数時間,グラフの「幅」

 指数の底は?
    半分全列挙,探索アルゴリズム

 FPTアルゴリズム
    FPTとは,有界探索木,カーネル

 包除原理
    数え上げ,畳込み

 余談&おまけ
    Theoretical part

                           5
何の指数?
動的計画法,準指数時間,グラフの「幅」




                      6
何の指数? 巡回セールスマン問題
 全ての頂点をちょうど一度ずつ通る最小の閉路

                1           2

        3                               2
                        1
                                                1
    0                   1           2
            3                                       3
    2
                    1
                                            3
        5
                                4
                    2



                                                        7
何の指数? 巡回セールスマン問題
 全ての頂点をちょうど一度ずつ通る最小の閉路

                1           2

        3                               2               コスト: 10
                        1
                                                1
    0                   1           2
            3                                       3
    2
                    1
                                            3
        5
                                4
                    2



                                                                  8
何の指数? 巡回セールスマン問題
 ナイーブな解法
   全ての方法を試して最小を求める

   𝑂(𝑛!)
            𝑛   𝑛
   • 𝑛! ≈   𝑒
                    = 𝑒 𝑛 log   𝑛−𝑛

   • 𝑛 ≤ 10 程度までなら解ける
 動的計画法
   すでに訪れた頂点の訪問順は無視できる
       𝑛 2
   𝑂 2 ⁡𝑛
   • 𝑛 ≤ 20 程度までなら解ける


                                      9
動的計画法
 𝑑𝑝[𝑆][𝑣]: 頂点0からスタートして,頂点集合𝑆をすで
 に訪れ,現在頂点𝑣にいる時の最小コスト


                               𝑢

                      ?                    𝑣


                      𝑆∖ 𝑣             𝑆


  𝑑𝑝[𝑆][𝑣] = min 𝑑𝑝 𝑆 ∖ 𝑣    𝑢 + 𝑑 𝑢, 𝑣 ⁡|⁡𝑢 ∈ 𝑆 ∖ 𝑣

                                                       10
余談
 2010年,特殊ケースである無向ハミルトン閉路問題
          3
 を𝑂 2 𝑛 時間で解くアルゴリズム[1]が開発された
     ∗    4

  ただし,多項式部分が大きく実用的ではない

 一方,巡回セールスマン問題に対しては,先の動的
  計画法よりも計算量的に優れたアルゴリズムは知ら
  れていない




     [1] Andreas Björklund: Determinant Sums for Undirected Hamiltonicity. FOCS 2010


                                                                                       11
何の指数? 最大クリーク問題
 頂点の部分集合𝑆で,𝑆のどの二点も辺で結ばれて
  いるような最大のものを求める
            1
                    2

    0
                        3


        5
                4


                            12
何の指数? 最大クリーク問題
 頂点の部分集合𝑆で,𝑆のどの二点も辺で結ばれて
  いるような最大のものを求める
            1
                    2

    0
                        3


        5
                4


                            13
何の指数? 最大クリーク問題
 ナイーブな解法
   全ての頂点の部分集合を試す
       𝑛
   𝑂 2 𝑛
  • 𝑛 ≤ 20 くらいまで解ける
 辺の数に対しては?
  実は𝑂   2   2𝑚 ⁡𝑛   で解ける
  • 𝑛, 𝑚 ≤ 200 くらいまで解ける




                            14
何の指数? 最大クリーク問題
 𝑂 2   2𝑚 ⁡𝑛   のアルゴリズム
   全ての頂点の次数が2𝑚以上ならば,𝑛 ≤ 2𝑚
   なので全通り試せば良い
   次数     2𝑚未満の点𝑣を一つ選ぶ
    • 𝑣を含むクリークは𝑣の隣接点の部分集合を全て試せば
      𝑂 2 2𝑚 で求まる
    • 𝑣を含まないクリークは𝑣を除去して再帰的に求めれば
      良い
 このアルゴリズムは全てのクリークを調べている
   クリークの個数は高々2
                          2𝑚 個

                                  15
余談
 最大クリーク問題は辺の数に関して準指数時間で解
  けたが,他のグラフ最適化問題も解けるのか?
    実は解けないであろうと信じられている

 ETH (Exponential Time Hypothesis)
  3-SATを2
             𝑜 𝑛   時間で解くアルゴリズムは存在しない
     • 𝑃 ≠ 𝑁𝑃予想の強い版
  ETHの元で,様々なグラフ最適化問題が辺の数𝑚
         𝑜(𝑚)
   について2           時間で解けないことが証明可能




                                       16
何の指数? グラフの「幅」
 二次元の𝑤 × ℎのグリッドに,互いに隣接(8方向)しな
  いようにできるだけ多くの石を置く




                                 17
何の指数? グラフの「幅」
 二次元の𝑤 × ℎのグリッドに,互いに隣接(8方向)しな
  いようにできるだけ多くの石を置く




                                 18
何の指数? グラフの「幅」
 ナイーブな解法
   石の置き方を全通り試す
   • 𝑂 2 𝑤ℎ
 幅を活用した動的計画法
  一番上の行から順番に決めていったとき,残りを
  決めるために必要な情報は最後の𝑤 + 1マスのみ
   • 𝑂 2 𝑤 ⁡𝑤ℎ




                             19
幅を活用した動的計画法


ココより上の置き方は
残りの置き方に影響を
与えない
             ?
                 この範囲のみに着目



                 ココより下はまだ石を
                 置いていない




                              20
余談
 グラフの「幅」とは?
   様々な幅が存在する
     • pathwidth, treewidth, branchwidth, cliquewidth, etc
     • それぞれの厳密な定義はここでは行わない
  様々なグラフ最適化問題が,幅に関する指数時間
   で解ける (FPT)
  コンテストで登場するのは主にグリッドグラフ
     • pathwidthが小さい




                                                             21
幅が定数のグラフ
 外平面グラフ
   平面グラフで,全ての頂点が一つの面(外面)上に
    載っている
 幅が定数ならば多項式時間

              3       5
      1
                                  9
                          7
  0               4
                              8
          2           6

                                      22
指数の底は?
半分全列挙,探索アルゴリズム




                 23
指数の底は? 部分和問題
 𝑛個の数{𝑎 𝑖 }が与えられる.ここから幾つか選んで,
 その総和を𝑠にすることが出来るか?

   {𝑎 𝑖 } = {11, 8, 5, 13, 16, 9}
   s = 26
            Yes (8+5+13)
   s = 23
            No



                                    24
指数の底は? 部分和問題
 ナイーブな解法
   全ての部分集合を試す
   • 𝑂 2𝑛
  動的計画法
   • 𝑂 𝑛𝑠 , 擬多項式時間アルゴリズム
      – Sが小さければ効率的
 半分全列挙
   二つに分けてそれぞれ全通り列挙し併合
            𝑛
   • 𝑂 2   2


   • 𝑠が非常に大きくても,𝑛 ≤ 40 くらいまで解ける

                                  25
半分全列挙
                                           𝑛
 前半分で作れる和と後半分で作れる和をそれぞれ2                 2

  時間かけて求め,ソートする
   {𝑎 𝑖 } = {11, 8, 5, 13, 16, 9}

   前半分: {0, 5, 8, 11, 13, 16, 19, 24}

   後半分: {0, 9, 13, 16, 22, 25, 29, 38}

 二つの列から足して𝑠になるペアが存在するかしゃく
  とり法で求める
   s = 26 → Yes (13+13)

   s = 23 → No



                                               26
指数の底は? 最大独立集合問題
 頂点の部分集合𝑆で,𝑆のどの二点も辺で結ばれて
  いないような最大のものを求める
            1
                    2

    0
                        3


        5
                4


                            27
指数の底は? 最大独立集合問題
 頂点の部分集合𝑆で,𝑆のどの二点も辺で結ばれて
  いないような最大のものを求める
            1
                    2

    0
                        3


        5
                4


                            28
指数の底は? 最大独立集合問題
 ナイーブな解法
   全ての頂点の部分集合を試す
   • 𝑂 2 𝑛 ⁡𝑛
   • 𝑛 ≤ 20 くらいまで解ける
 探索アルゴリズム
   ある頂点を使うか使わないかで分岐していく

  辺で結ばれている二点を同時には選べないため,
    𝑛
   2 通り全てを試す必要はない
  計算量の解析が非常に難しい




                            29
探索アルゴリズム
 頂点𝑣を一つ選び,𝑣を使わないケースと使うケース
  に分岐する
   𝑣を使わない場合,𝑣を取り除く

   𝑣を使う場合,𝑣の隣接点も一緒に取り除かれる

            𝑣



    𝑣                𝑣




                             30
探索アルゴリズム
 最悪ケースは・・・?
   全部孤立点のとき,2
               𝑛




                   31
探索アルゴリズム
 分岐不要なケース
   次数1以下の点: 必ず使うとしてよい




      𝑣             𝑣


      𝑢             𝑢




                         32
探索アルゴリズムの計算量解析
 計算量は?
                   𝑛
   𝑛頂点の時の探索木の大きさが𝑐 で抑えられると
   する
     𝑣を使わない場合1点減る
    𝑐 𝑛 ≥ 𝑐 𝑛−1 + 𝑐 𝑛−3 が満たされれば良い
          𝑣を使う場合,少なくとも3点減る

 𝑂 1.466 𝑛 ⁡𝑛 が示せる
   40頂点くらいあっても大丈夫




                                     33
探索アルゴリズムの計算量解析
 もっと頑張ると…
  次数最大の頂点で分岐することにすれば,最大次
  数が2以下のグラフ(閉路orパス)は多項式時間で
  解けるので, 𝑐 𝑛 ≥ 𝑐 𝑛−1 + 𝑐 𝑛−4
          𝑛
  𝑂 1.381 ⁡𝑛 が示せる



 最悪ケースは・・・?
   よく分からない




                               34
余談
 現在計算量的に最もよい最大独立集合のアルゴリズ
  ムは𝑂∗ (1.212 𝑛 )[2],次数3以下に制限したグラフで
  は𝑂∗ 1.089 𝑛 [3]が示されている
   解析が非常に複雑

    ある種の最適化問題をコンピュータを用いて解くこ
       とで行なっている
 一般に探索アルゴリズムの実際の計算量と証明でき
  る計算量の間には大きな開きがあり,証明できなくて
  も実際には非常に高速であることが多い
[2] Nicolas Bourgeois et al.: Fast Algorithms for max independent set. Algorithmica 62(1-2) (2012)
[3] Mingyu Xiao: A Simple and Fast Algorithm for Maximum Independent Set in 3-Degree Graphs.
WALCOM 2010
                                                                                                     35
余談
 SETH (Strong Exponential Time Hypothesis)
   SATを𝑂     2− 𝜖   𝑛   時間で解くアルゴリズムは存在
    しない
     • ETHの更に強い版
 SETHの仮定のもので,様々な問題に対して計算量の
  下界を証明できる
    下界と上界が一致する問題はあまりない
     • 帰着により問題サイズが大きくなるため




                                              36
FPTアルゴリズム
FPTとは,有界探索木,カーネル




                   37
FPTアルゴリズム
 FPTアルゴリズムとは?
    FPT: Fixed Parameter Tractable

    入力サイズとは独立なパラメータ𝑘に関してのみ指
     数時間のアルゴリズム
   • 計算量の例: 𝑂 2 𝑘 ⁡𝑛 など
   • パラメータの例: グラフの幅,解の大きさ,など




                                      38
FPT: 最小頂点被覆問題
 頂点の部分集合𝑆で,どの辺もその端点の少なくとも
  一方が𝑆に属しているような最小のものを求める
             1
                     2

     0
                         3


         5
                 4


                             39
FPT: 最小頂点被覆問題
 頂点の部分集合𝑆で,どの辺もその端点の少なくとも
  一方が𝑆に属しているような最小のものを求める
             1
                     2

     0
                         3


         5
                 4


                             40
FPT: 最小頂点被覆問題
 最大独立集合に帰着
   𝑆が頂点被覆⇔𝑉 ∖ 𝑆が独立集合
                    𝑛
   探索アルゴリズムを用いて𝑂 𝑐 で解ける

 𝑆 ≤ 𝑘の頂点被覆が存在するか判定
   ナイーブな解法
   • 全ての選び方を試す
   • 𝑂 𝑛 𝑘+1
  有界探索木
   • 𝑂 2 𝑘 𝑛 で解ける (FPT)
   • グラフが大きくてもあまり問題無い

                           41
有界探索木
 辺𝑒 = 𝑢, 𝑣 を一つ選び,𝑢を使うケースと𝑣を使う
  ケースに分岐する
   𝑒を被覆するためには,必ずどちらかは使う必要が
   ある
   𝑢を使う場合,𝑢と隣接する辺を取り除き,𝑘を1減ら
   す

      𝑢       𝑢        𝑢


      𝑣       𝑣        𝑣


                                 42
有界探索木
 毎回𝑘は1減るため,探索木の深さは高々𝑘
  計算量は𝑂            2 𝑘 ⁡𝑛

 最大独立集合の探索アルゴリズムのときと同様に,𝑘
  の底をもっと小さくすることが可能
    𝑂 1.466 𝑘 ⁡𝑛
  1000頂点のグラフから,サイズ30以下の頂点被覆
     を求めることが可能



                               43
有界探索木
 分岐不要なケース
   次数1以下の点: 除去して良い




      𝑣               𝑣


      𝑢               𝑢




                          44
有界探索木
 頂点𝑣を一つ選び,𝑣を使わないケースと使うケース
  に分岐する
   𝑣を使わない場合,𝑣の隣接点を全て使う

   𝑣を使う場合,𝑣と接続する辺を取り除く

            𝑣



    𝑣                𝑣




                             45
FPT: カーネル
 最大独立集合の探索アルゴリズムに加え,サイズ𝑘
  以下の解が欲しいので,以下のルールを追加できる

 分岐不要なケース
   次数𝑘 + 1以上の点: 必ず使うとしてよい
   • 使わない場合,隣接する𝑘 + 1点を使う必要がある


 このルールを繰り返し適用した後,全ての頂点の次
  数は𝑘以下となり,もし辺数が𝑘 2 より多ければ,その
  時点で解が存在しないことがわかる

                                 46
FPT: カーネル
 つまり,𝑂(𝑘𝑛) 時間の前処理で,𝑛′ ≤ 2𝑘 2 , 𝑘 ′ ≤ 𝑘の
  問題に変換することが出来る
   この前処理を行った後で,有界探索木法を用いれ
                  𝑘 2
   ば,全体の計算量は 𝑂 1.466 ⁡𝑘 + 𝑘𝑛
   100万頂点のグラフから,サイズ30以下の頂点被
   覆を求めることが可能!

 このように,多項式時間の前処理を行うことで,問題
  サイズを𝑘の関数𝑓(𝑘)以下にまで小さくする手法を
  カーネライズと呼び,小さくなった問題をカーネルと呼
  ぶ
                                           47
余談
 ある問題がFPTであることと,カーネライズできること
  は同値
   ⇒: 𝑓 𝑘 𝑝 𝑛 で解けるとき,𝑛 ≤ 𝑓 𝑘 ならばサイズ
    𝑓(𝑘)のカーネルが存在し,𝑛 > 𝑓(𝑘)ならば
    𝑓 𝑘 𝑝 𝑛 は𝑛に関する多項式時間なので前処理
    の中で完全に解くことが出来る
   ⇐: カーネルを愚直に解けばよい



 ただし,指数サイズのカーネルなので実用上は役に
  立たず,多項式サイズのカーネルがあるかはまた別
  の問題
                                       48
余談
 現在計算量的に最も優れた最小頂点被覆のFPTアル
  ゴリズムは,𝑂 1.2738 𝑘 + 𝑘𝑛 ,カーネルサイズは2𝑘
  のものが得られている[4]
 大きさ𝑘の独立集合やクリークを求める問題は𝑘に対
  してFPTでないと考えられている
   W[1]-complete




[4] Jianer Chen et al.: Improved upper bounds for vertex cover. Theor. Comput. Sci. 411(40-42)
(2010)


                                                                                                 49
FPT: シュタイナー木問題
 辺の部分集合であって,与えられた𝑘点のターミナル
  を連結にする最小のものを求める


                     t
        t




    t            t


                             50
FPT: シュタイナー木問題
 辺の部分集合であって,与えられた𝑘点のターミナル
  を連結にする最小のものを求める


                     t
        t




    t            t


                             51
FPT: シュタイナー木問題
 おそらく,コンテストで最もよく出題されているFPTの
  問題
 ターミナル数𝑘に関してFPT
 動的計画法を用いて𝑂 3 𝑘 𝑛 + 2 𝑘 𝑚 で解ける




                                  52
動的計画法
 𝑑𝑝 𝑆 𝑣 : ⁡ターミナル集合𝑆と頂点𝑣を連結にする
            最小の辺数 (𝑣はターミナルに限らない)
         𝑢       𝑣
                                 𝑣
                                       ?     𝑇



       ?                       ?
                               𝑆∖ 𝑇
             𝑆


 𝑑𝑝 𝑆 𝑣 = min⁡ min 𝑑𝑝 𝑆 𝑢 + 1| 𝑢, 𝑣 ∈ 𝐸 ,
             (                              ※ループしているので
    min 𝑑𝑝 𝑇 𝑣 + 𝑑𝑝 𝑆 ∖ 𝑇 𝑣 𝑇 ⊆ 𝑆})         幅優先で行う



                                                         53
包除原理
数え上げ,畳込み




           54
包除原理
 𝑓 𝑆 =         𝑔(𝑇) , 𝑔 𝑆 =         −1   𝑆 −|𝑇|   𝑓(𝑇)
          𝑇⊆𝑆                  𝑇⊆𝑆
 指数時間アルゴリズムにおいて,包除原理は非常に
  強力なツール
 応用例
   ハミルトンパスを多項式空間で

   グラフ彩色問題

   動的計画法を高速化 (畳込み)




                                                          55
包除原理
 𝑓 𝑆 =              𝑔(𝑇) , 𝑔 𝑆 =             −1    𝑆 −|𝑇|   𝑓(𝑇)
              𝑇⊆𝑆                       𝑇⊆𝑆
                               𝑆 −|𝑇|
     𝑔 𝑆 =     𝑇⊆𝑆       −1            𝑋⊆𝑇 𝑔(𝑋)
                                         𝑆− 𝑇
          =         𝑋⊆𝑆    𝑋⊆𝑇⊆𝑆   −1              𝑔(𝑋)
        = 𝑔(𝑆)
   𝑔を計算したいが,直接は難しい時に,その和𝑓を
   計算することが出来れば2 𝑛 回𝑓を計算することで𝑔
   が求まる
   𝑔 → 𝑓: ゼータ変換,𝑓 → 𝑔: メビウス変換
      • どちらも2 𝑛 で計算できる
      • 高速ゼータ・メビウス変換

                                                                    56
包除原理: ハミルトンパス
 ハミルトンパスを求めるのは難しいが,長さ𝑛 − 1の
  (単純とは限らない)𝑠−𝑡パスの個数を求めるのは簡単
    単純な動的計画法で求まる

 𝑔 𝑆 ≔ 𝑆のみを通り,かつ𝑆を全て通る長さ𝑛 − 1の
   𝑠−𝑡パスの個数
    𝑔(𝑉) := 𝑠−𝑡ハミルトンパスの個数

 𝑓 𝑆 = 𝑇⊆𝑆 𝑔(𝑇)
    𝑆のみを通る長さ𝑛 − 1の𝑠−𝑡パスの個数



 𝑂 2 𝑛 ⁡𝑛𝑚 time, 𝑂(𝑛) space

                                  57
包除原理: 彩色数
 隣接する頂点が異なる色となるように彩色するため
  に必要な最小色数を求める
            1
                    2

    0
                        3


        5
                4


                            58
包除原理: 彩色数
 隣接する頂点が異なる色となるように彩色するため
  に必要な最小色数を求める
            1
                    2

    0
                        3


        5
                4


                            59
包除原理: 彩色数
 ナイーブな方法
   色の塗り方を全通り試す
        𝑛
   𝑂 𝑘 , k:答え

 動的計画法
   一色ずつ一気に塗る

   𝑑𝑝[𝑆]: 𝑆を彩色する最小色数
      • 𝑑𝑝 𝑆 = min 𝑑𝑝 𝑇 + 1⁡ ⁡ 𝑆 ∖ 𝑇が独立集合}
   𝑂 3𝑛
 包除原理
       𝑛
   𝑂 2 ⁡𝑛 で解ける

                                             60
包除原理: 彩色数
 グラフ𝐺 = (𝑉, 𝐸)が𝑘彩色可能⇔𝑉を𝑘個の独立集合
  で被覆できる
   独立集合から𝑘個選んで𝑉を覆う方法の総数を数
    えることが出来れば良い
 𝑔 𝑆 ≔ 独立集合から𝑘個選んでSをちょうど覆う方法
  の総数
 𝑓 𝑆 = 𝑇⊆𝑆 𝑔(𝑇)
   𝑆の部分集合で独立なもの𝑘個選ぶ方法の総数




                                  61
包除原理: 彩色数
 𝐼 𝑆 : 𝑆の部分集合で独立なものの個数とすると,
       𝑓 𝑆 = 𝐼 𝑆 𝑘
    𝐼 𝑆 = 𝐼 𝑆∖ 𝑣  + 𝐼 𝑆 ∖ 𝑁 𝑣 という漸化式から
      𝑂(2 𝑛 𝑛)時間で全ての𝑆 ⊆ 𝑉について計算可能

 実は,彩色方法の総数を求めることも可能
   𝑔 𝑆 ≔ 独立集合から𝑘個,サイズの総和が𝑛と

  なるように選んでSをちょうど覆う方法の総数
   𝑓(𝑆)の計算はDPをすればよい



                                          62
包除原理: 高速ゼータ変換
          𝑓𝜁 𝑆 =         𝑓 𝑇
                   𝑇⊆𝑆



 𝑣を含まない
           𝑓1                  𝑔1   𝑔1 = 𝑓1 𝜁

                                                これを再利用すればよい
                   𝜻
  𝑣を含む     𝑓2                  𝑔2   𝑔2 = 𝑓1 𝜁 + 𝑓2 𝜁




            𝑓                  𝑔

                                                              63
包除原理: 畳込み
 関数𝑓(𝑆), 𝑔(𝑆)から
          𝑓∘ 𝑔   𝑆 =         𝑓 𝑇 𝑔(𝑆 ∖ 𝑇)
                       𝑇⊆𝑆
    を計算する操作を畳込みと呼ぶ
 単純には𝑂 3 𝑛 で可能
 実は𝑂 2 𝑛 で行うことが出来る
 これを応用すると,色々な部分集合に対するDPを高
  速化することができる
                     𝑘      𝑘
   例: シュタイナー木を3 から2 に
       min 𝑑𝑝 𝑇 𝑣 + 𝑑𝑝 𝑆 ∖ 𝑇 𝑣 𝑇 ⊆ 𝑆}

                                            64
包除原理: 畳込み
              𝑓∘ 𝑔   𝑆 =         𝑓 𝑇 𝑔(𝑆 ∖ 𝑇)
                           𝑇⊆𝑆



𝑣を含まない                                          ℎ1 = 𝑓1 ∘ 𝑔1
         𝑓1           𝑔1             ℎ1




                                                ℎ2 = 𝑓1 ∘ 𝑔2 + 𝑓2 ∘ 𝑔1
 𝑣を含む    𝑓2           𝑔2             ℎ2




          𝑓           𝑔              𝑓∘ 𝑔

                                                                         65
包除原理: 畳込み
 ℎ1 = 𝑓1 ∘ 𝑔1 , ℎ2 = 𝑓1 ∘ 𝑔2 + 𝑓2 ∘ 𝑔1
    半分の大きさのを3回計算するので3
                                            𝑛

    なんとか2回でできないか?

 ℎ2 𝑥 + 𝑓2 ∘ 𝑔2 𝑥 2 = 𝑓1 + 𝑓2 𝑥 ∘ 𝑔1 + 𝑔2 𝑥 − ℎ1
    値を𝑥の多項式に拡張: 𝑓𝑥 𝑆 = 𝑓 𝑆 𝑥

    𝑓 ∘ 𝑔の代わりに, 𝑓 ∘ 𝑔 𝑥 + ゴミ𝑥 を求めること
                                        2

     ができた
                                          𝑛
    気にせず進めると最終的に 𝑓 ∘ 𝑔 𝑥 + ゴミ

   が得られ,ゴミの項は𝑥 𝑛+1 以上なので𝑥 𝑛 の係数を
   取り出せば良い

                                                    66
包除原理: 畳込み


  {}     1   2


  {0}    3   3


  {1}    2   1


 {0,1}   4   4



         𝑓   𝑔




                 67
包除原理: 畳込み


  {}     1   2     1        2


  {0}    3   3     3        3


  {1}    2   1
                 1 + 2𝑥   2+ 𝑥


 {0,1}   4   4
                 3 + 4𝑥   3 + 4𝑥



         𝑓   𝑔




                                   68
包除原理: 畳込み

                                         2
  {}     1   2     1        2

                                    (1 + 3𝑥)(2
  {0}    3   3     3        3       + 3𝑥)


  {1}    2   1
                 1 + 2𝑥   2+ 𝑥     2 + 5𝑥 + 2𝑥 2


 {0,1}   4   4
                 3 + 4𝑥   3 + 4𝑥   (1 + 5𝑥
                                   + 4𝑥 2 )(2 + 4𝑥
                                   + 4𝑥 2 )
         𝑓   𝑔




                                                     69
包除原理: 畳込み

                                        2
  {}     1   2        2𝑥

                                   (1 + 3𝑥)(2
  {0}    3   3     9𝑥 + 9𝑥   2     + 3𝑥)


  {1}    2   1
                 2𝑥 + 5𝑥 2 + ⋯    2 + 5𝑥 + 2𝑥 2


 {0,1}   4   4                    (1 + 5𝑥
                 9𝑥 + 30𝑥 2 + ⋯
                                  + 4𝑥 2 )(2 + 4𝑥
                                  + 4𝑥 2 )
         𝑓   𝑔




                                                    70
包除原理: 畳込み

                                            2
                2
  {}       2𝑥             2𝑥

                                       (1 + 3𝑥)(2
            2                    2     + 3𝑥)
  {0}    9𝑥 + ⋯        9𝑥 + 9𝑥


  {1}    5𝑥 2 + ⋯                     2 + 5𝑥 + 2𝑥 2
                     2𝑥 + 5𝑥 2 + ⋯


 {0,1}   21𝑥 2 + ⋯                    (1 + 5𝑥
                     9𝑥 + 30𝑥 2 + ⋯
                                      + 4𝑥 2 )(2 + 4𝑥
                                      + 4𝑥 2 )
         𝑓∘ 𝑔




                                                        71
包除原理: 畳込み


  {}     1   2   2


  {0}    3   3   9


  {1}    2   1   5


 {0,1}   4   4   21



         𝑓   𝑔   𝑓∘ 𝑔




                        72
余談
 包除原理の指数時間アルゴリズムへの適用は2006
  年に彩色問題に適用[5]されてから非常に研究が進
  んだ
 シュタイナー木問題は畳込みを経由せずに直接的に
  包除原理を用いて 2 𝑘 で解くことも可能[6]
 畳込みはゼータ・メビウス変換で考えても良い
   FFT,逆FFTみたいな感じ
      先の解説は高速行列積のアルゴリズムを元にした
[5] Andreas Björklund, Thore Husfeldt: Inclusion--Exclusion Algorithms for Counting Set Partitions.
FOCS 2006
[6] Jesper Nederlof: Fast Polynomial-Space Algorithms Using Möbius Inversion: Improving on
Steiner Tree and Related Problems. ICALP 2009


                                                                                                      73
おまけ




      74
おまけ: 完全マッチングの個数
                                                     𝑛
 完全マッチングの個数は𝑂∗ 2 で求めることが可能                         2



                              1
                                                   2

             0
                                                                3


                   5
                                              4
 [7] Andreas Björklund: Counting perfect matchings as fast as Ryser. SODA 2012

                                                                                 75
おまけ: 完全マッチングの個数
                                                     𝑛
 完全マッチングの個数は𝑂∗ 2 で求めることが可能                         2



                              1
                                                   2

             0
                                                                3


                   5
                                              4
 [7] Andreas Björklund: Counting perfect matchings as fast as Ryser. SODA 2012

                                                                                 76
おまけ: 完全マッチングの個数
                                                     𝑛
 完全マッチングの個数は𝑂∗ 2 で求めることが可能                         2



                              1
                                                   2

             0
                                                                3


                   5
                                              4
 [7] Andreas Björklund: Counting perfect matchings as fast as Ryser. SODA 2012

                                                                                 77
おまけ: 完全マッチングの個数
                                                     𝑛
 完全マッチングの個数は𝑂∗ 2 で求めることが可能                         2



                              1
                                                   2

             0
                                                                3


                   5
                                              4
 [7] Andreas Björklund: Counting perfect matchings as fast as Ryser. SODA 2012

                                                                                 78
おまけ: 完全マッチングの個数
 頂点を二つ取り除き,ラベルに置き換える

             1
                     2

     0
                         3


         5
                 4


                             79
おまけ: 完全マッチングの個数
 マッチングにラベルaのついた辺25を使う→元のグラ
  フで辺05,12を使う


                              2
           ※ラベル無しの辺と
 1         ラベルaの辺があるの意味


     ε+a         ε+a

                          a       3
 0

           5
                          4
                  ε+a



                                      80
おまけ: 完全マッチングの個数
 もとのグラフでの完全マッチングの個数=新しいグラ
  フでラベルaをちょうど一回使う完全マッチングの個数


                         2
 1
     ε+a       ε+a

                     a       3
 0

           5
                     4
               ε+a



                                 81
おまけ: 完全マッチングの個数
 もとのグラフでの完全マッチングの個数=新しいグラ
  フでラベルabをちょうど一回ずつ使う完全マッチング
  の個数

                              2
 1
                                  ε+b
     ε+a

 0                            3

           5
                          4
               ε+a+b+ab


                                        82
おまけ: 完全マッチングの個数
 もとのグラフでの完全マッチングの個数=新しいグラ
  フでラベルabcをちょうど一回ずつ使う完全マッチング
  の個数 → これは包除原理で2 𝐿 で求まる (𝐿 = 𝑛 )
                              2
                                    2
  1
                                        ε+b
      ε+a         4通り!

  0                                 3

            5
                                4
                ε+c+ac+bc+abc


                                              83
おまけ: Color Coding
 k-Cycle
    グラフに長さ𝑘の単純な閉路が含まれるか判定し
     たい
    𝑘 = 𝑛のときハミルトン閉路問題

   ナイーブな解法:                 𝑂 𝑛𝑘
   FPT:   𝑂   2𝑒   𝑘   𝑚 で解ける



                         3
                             𝑘
 余談: 現在最速は2             4


                                    84
おまけ: Color Coding
 頂点をランダムに𝑘色で塗り,各色をちょうど一度ず
  つ通る閉路があるか調べる
               1
                        2

       0
                            3


           5
                    4


                                85
おまけ: Color Coding
 頂点をランダムに𝑘色で塗り,各色をちょうど一度ず
  つ通る閉路があるか調べる
   これは単純なDPで𝑂      2 𝑘 ⁡𝑚 で解ける

 ある長さ𝑘に閉路上の頂点が全て異なる色で塗られ
        𝑘!
  る確率は, 𝑘 𝑘 ≈ 2𝜋𝑘𝑒 −𝑘


 𝑒 𝑘 回繰り返せば十分な確率で正しく求まる



                                  86
おまけ: Bandwidth
 頂点を一列に並べ,一番長い辺の長さを最小化する
                        0
        1
                2
                        1

0                       5
                    3

                        2
    5
            4           4

                        3
                            87
おまけ: Bandwidth
 ナイーブな解法: 𝑛!
 とても賢い動的計画法を用いると5 𝑛 で解ける

 k以下の解があるかを判定して二分探索する




  [8] Marek Cygan, Marcin Pilipczuk: Even Faster Exact Bandwidth. ACM Transactions on
  Algorithms 8(1) (2012)


                                                                                        88
おまけ: Bandwidth
 1~𝑛を𝑘 + 1個ずつに区切る

     1   2   3   4   5   6   7   8   9




 頂点をどの区間に割り当てるか全通り試す
   隣接する頂点は,同じ区間か隣の区間にしか入れ
           𝑛
   ないので高々3 通り

 1 → 𝑘 + 2 → ⋯ → 2 → 𝑘 + 3 → ⋯ という順に頂点を
  置いていく

                                           89
おまけ: Bandwidth
 すでに置いた頂点の並び順は無視することができる

    1   2   3   4   5   6   7   8   9



                距離2以下の区間


 よってどの頂点を置いたかで2 𝑛 のDPが可能
 区間への割り当てとDPでの状態を同時に考えると実
  は状態数は5 𝑛 しかないことが示せる



                                        90
おまけ: Cut & Count
 グリッドグラフ上のシュタイナー木問題
           𝑤
   幅wに対して𝑐 で解きたい



                   t




          t

                       t

                           91
おまけ: Cut & Count
 グリッドグラフ上のシュタイナー木問題
           𝑤
   幅wに対して𝑐 で解きたい



                   t




          t

                       t

                           92
おまけ: Cut & Count
 グリッドグラフ上のシュタイナー木問題
           𝑤
   幅wに対して𝑐 で解きたい

       ナイーブにやると,どことどこがつながっているか
                 𝑤
     の情報が必要→𝑤 とかになってしまう
 Cut & Count
    包除原理的なキャンセリング手法を用いる




[9] Marek Cygan et al.: Solving Connectivity Problems Parameterized by Treewidth in Single
Exponential Time. FOCS 2011


                                                                                             93
おまけ: Cut & Count
 連結な解を求めるのではなく,解とその頂点を二つ
  のバッグに分割する方法のペアの総数を数える
   ただし,ある頂点はバッグ1に必ず入れる

   連結ならば分け方は一通り

   非連結ならば分け方は偶数通り




    0              0




                            94
おまけ: Cut & Count
 連結な解を求めるのではなく,解とその頂点を二つ
  のバッグに分割する方法のペアの総数を数える
   ただし,ある頂点はバッグ1に必ず入れる

   連結ならば分け方は一通り

   非連結ならば分け方は偶数通り

 解が奇数個ならば,正しく求まる
   偶数個ある場合は,ランダムに重み付けすると十
   分な確率で奇数にできる (Isolation Lemma)




                                   95
おまけ: Iterative Compression
 Feedback頂点集合問題
    グラフから𝑘点取り除いて木にできるか判定


                1
                          2

        0
                              3


            5
                      4

                                  96
おまけ: Iterative Compression
 Feedback頂点集合問題
    グラフから𝑘点取り除いて木にできるか判定


                1
                          2

        0
                              3


            5
                      4

                                  97
おまけ: Iterative Compression
 頂点{𝑣1 , … , 𝑣 𝑖−1 }からなるグラフ𝐺 𝑖−1 に対する解𝐹𝑖−1
  から頂点𝑣 𝑖 を追加したグラフ𝐺 𝑖 に対する解𝐹𝑖 を構築す
  る
   𝐹 𝑖−1 ∪ 𝑣 𝑖 の大きさは高々𝑘 + 1で,これを𝐺 𝑖 から
    取り除くと残りは木になる
   つまり,木幅が小さい
    • Cut & Countを用いると3 𝑘 時間でサイズ𝑘の解が求まる

                 𝐺𝑖          𝐺 𝑖−1

            𝑣𝑖        𝐹𝑖−1           木


                                              98

More Related Content

指数時間アルゴリズム入門