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

16,002 views

Published on

情オリ2012春合宿講義資料

Published in: Education
0 Comments
37 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
16,002
On SlideShare
0
From Embeds
0
Number of Embeds
241
Actions
Shares
0
Downloads
109
Comments
0
Likes
37
Embeds 0
No embeds

No notes for slide

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

  1. 1. 指数時間アルゴリズム入門 岩田 陽一 (東京大学 M1) JOI 春合宿 2012
  2. 2. 自己紹介 TopCoder: ◎wata TCO2010Marathon優勝など Twitter: @wata_orz 東京大学情報理工学系研究科コンピュータ科学専攻 理論計算機科学 (アルゴリズムの理論的な解析とか) プログラミングコンテスト チャレンジブック 2
  3. 3. 本日の内容 NP困難問題を解くためのアルゴリズムを扱います 𝑂𝑃𝑇 𝐼 ≤ 𝐴 𝐼 ≤ 𝑐𝑂𝑃𝑇(𝐼) 近似アルゴリズムヒューリスティック 𝑓 𝑘 𝑝 𝑛 FPT アルゴリズム max⁡ 𝑐𝑥|𝐴𝑥 ≤ 𝑏, 𝑥: 整数} { 𝑂∗ 𝑐 𝑛 整数計画 厳密指数時間アルゴリズム 3
  4. 4. 効率的な指数時間アルゴリズム 何の指数?  頂点数? 辺の数? それとも… • 2 𝐸 のアルゴリズムはまず役に立たないが,2 𝑉 のアル ゴリズムならコンテストでもよく出題されている • 入力サイズとは別のパラメータに関してのみ指数である ような場合もある (FPTアルゴリズム) 指数の底は? 𝑛 2 𝑛 と2 では解けるサイズが倍違う 2 100  1.2 < 1004 コンテストに出うるものに絞って解説 4
  5. 5. 内容一覧 何の指数?  動的計画法,準指数時間,グラフの「幅」 指数の底は?  半分全列挙,探索アルゴリズム FPTアルゴリズム  FPTとは,有界探索木,カーネル 包除原理  数え上げ,畳込み 余談&おまけ  Theoretical part 5
  6. 6. 何の指数?動的計画法,準指数時間,グラフの「幅」 6
  7. 7. 何の指数? 巡回セールスマン問題 全ての頂点をちょうど一度ずつ通る最小の閉路 1 2 3 2 1 1 0 1 2 3 3 2 1 3 5 4 2 7
  8. 8. 何の指数? 巡回セールスマン問題 全ての頂点をちょうど一度ずつ通る最小の閉路 1 2 3 2 コスト: 10 1 1 0 1 2 3 3 2 1 3 5 4 2 8
  9. 9. 何の指数? 巡回セールスマン問題 ナイーブな解法  全ての方法を試して最小を求める  𝑂(𝑛!) 𝑛 𝑛 • 𝑛! ≈ 𝑒 = 𝑒 𝑛 log 𝑛−𝑛 • 𝑛 ≤ 10 程度までなら解ける 動的計画法  すでに訪れた頂点の訪問順は無視できる 𝑛 2  𝑂 2 ⁡𝑛 • 𝑛 ≤ 20 程度までなら解ける 9
  10. 10. 動的計画法 𝑑𝑝[𝑆][𝑣]: 頂点0からスタートして,頂点集合𝑆をすで に訪れ,現在頂点𝑣にいる時の最小コスト 𝑢 ? 𝑣 𝑆∖ 𝑣 𝑆 𝑑𝑝[𝑆][𝑣] = min 𝑑𝑝 𝑆 ∖ 𝑣 𝑢 + 𝑑 𝑢, 𝑣 ⁡|⁡𝑢 ∈ 𝑆 ∖ 𝑣 10
  11. 11. 余談 2010年,特殊ケースである無向ハミルトン閉路問題 3 を𝑂 2 𝑛 時間で解くアルゴリズム[1]が開発された ∗ 4  ただし,多項式部分が大きく実用的ではない 一方,巡回セールスマン問題に対しては,先の動的 計画法よりも計算量的に優れたアルゴリズムは知ら れていない [1] Andreas Björklund: Determinant Sums for Undirected Hamiltonicity. FOCS 2010 11
  12. 12. 何の指数? 最大クリーク問題 頂点の部分集合𝑆で,𝑆のどの二点も辺で結ばれて いるような最大のものを求める 1 2 0 3 5 4 12
  13. 13. 何の指数? 最大クリーク問題 頂点の部分集合𝑆で,𝑆のどの二点も辺で結ばれて いるような最大のものを求める 1 2 0 3 5 4 13
  14. 14. 何の指数? 最大クリーク問題 ナイーブな解法  全ての頂点の部分集合を試す 𝑛  𝑂 2 𝑛 • 𝑛 ≤ 20 くらいまで解ける 辺の数に対しては?  実は𝑂 2 2𝑚 ⁡𝑛 で解ける • 𝑛, 𝑚 ≤ 200 くらいまで解ける 14
  15. 15. 何の指数? 最大クリーク問題 𝑂 2 2𝑚 ⁡𝑛 のアルゴリズム  全ての頂点の次数が2𝑚以上ならば,𝑛 ≤ 2𝑚 なので全通り試せば良い  次数 2𝑚未満の点𝑣を一つ選ぶ • 𝑣を含むクリークは𝑣の隣接点の部分集合を全て試せば 𝑂 2 2𝑚 で求まる • 𝑣を含まないクリークは𝑣を除去して再帰的に求めれば 良い このアルゴリズムは全てのクリークを調べている  クリークの個数は高々2 2𝑚 個 15
  16. 16. 余談 最大クリーク問題は辺の数に関して準指数時間で解 けたが,他のグラフ最適化問題も解けるのか?  実は解けないであろうと信じられている ETH (Exponential Time Hypothesis)  3-SATを2 𝑜 𝑛 時間で解くアルゴリズムは存在しない • 𝑃 ≠ 𝑁𝑃予想の強い版  ETHの元で,様々なグラフ最適化問題が辺の数𝑚 𝑜(𝑚) について2 時間で解けないことが証明可能 16
  17. 17. 何の指数? グラフの「幅」 二次元の𝑤 × ℎのグリッドに,互いに隣接(8方向)しな いようにできるだけ多くの石を置く 17
  18. 18. 何の指数? グラフの「幅」 二次元の𝑤 × ℎのグリッドに,互いに隣接(8方向)しな いようにできるだけ多くの石を置く 18
  19. 19. 何の指数? グラフの「幅」 ナイーブな解法  石の置き方を全通り試す • 𝑂 2 𝑤ℎ 幅を活用した動的計画法  一番上の行から順番に決めていったとき,残りを 決めるために必要な情報は最後の𝑤 + 1マスのみ • 𝑂 2 𝑤 ⁡𝑤ℎ 19
  20. 20. 幅を活用した動的計画法ココより上の置き方は残りの置き方に影響を与えない ? この範囲のみに着目 ココより下はまだ石を 置いていない 20
  21. 21. 余談 グラフの「幅」とは?  様々な幅が存在する • pathwidth, treewidth, branchwidth, cliquewidth, etc • それぞれの厳密な定義はここでは行わない  様々なグラフ最適化問題が,幅に関する指数時間 で解ける (FPT)  コンテストで登場するのは主にグリッドグラフ • pathwidthが小さい 21
  22. 22. 幅が定数のグラフ 外平面グラフ  平面グラフで,全ての頂点が一つの面(外面)上に 載っている 幅が定数ならば多項式時間 3 5 1 9 7 0 4 8 2 6 22
  23. 23. 指数の底は?半分全列挙,探索アルゴリズム 23
  24. 24. 指数の底は? 部分和問題 𝑛個の数{𝑎 𝑖 }が与えられる.ここから幾つか選んで, その総和を𝑠にすることが出来るか? {𝑎 𝑖 } = {11, 8, 5, 13, 16, 9} s = 26 Yes (8+5+13) s = 23 No 24
  25. 25. 指数の底は? 部分和問題 ナイーブな解法  全ての部分集合を試す • 𝑂 2𝑛  動的計画法 • 𝑂 𝑛𝑠 , 擬多項式時間アルゴリズム – Sが小さければ効率的 半分全列挙  二つに分けてそれぞれ全通り列挙し併合 𝑛 • 𝑂 2 2 • 𝑠が非常に大きくても,𝑛 ≤ 40 くらいまで解ける 25
  26. 26. 半分全列挙 𝑛 前半分で作れる和と後半分で作れる和をそれぞれ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
  27. 27. 指数の底は? 最大独立集合問題 頂点の部分集合𝑆で,𝑆のどの二点も辺で結ばれて いないような最大のものを求める 1 2 0 3 5 4 27
  28. 28. 指数の底は? 最大独立集合問題 頂点の部分集合𝑆で,𝑆のどの二点も辺で結ばれて いないような最大のものを求める 1 2 0 3 5 4 28
  29. 29. 指数の底は? 最大独立集合問題 ナイーブな解法  全ての頂点の部分集合を試す • 𝑂 2 𝑛 ⁡𝑛 • 𝑛 ≤ 20 くらいまで解ける 探索アルゴリズム  ある頂点を使うか使わないかで分岐していく  辺で結ばれている二点を同時には選べないため, 𝑛 2 通り全てを試す必要はない  計算量の解析が非常に難しい 29
  30. 30. 探索アルゴリズム 頂点𝑣を一つ選び,𝑣を使わないケースと使うケース に分岐する  𝑣を使わない場合,𝑣を取り除く  𝑣を使う場合,𝑣の隣接点も一緒に取り除かれる 𝑣 𝑣 𝑣 30
  31. 31. 探索アルゴリズム 最悪ケースは・・・?  全部孤立点のとき,2 𝑛 31
  32. 32. 探索アルゴリズム 分岐不要なケース  次数1以下の点: 必ず使うとしてよい 𝑣 𝑣 𝑢 𝑢 32
  33. 33. 探索アルゴリズムの計算量解析 計算量は? 𝑛  𝑛頂点の時の探索木の大きさが𝑐 で抑えられると する 𝑣を使わない場合1点減る  𝑐 𝑛 ≥ 𝑐 𝑛−1 + 𝑐 𝑛−3 が満たされれば良い 𝑣を使う場合,少なくとも3点減る 𝑂 1.466 𝑛 ⁡𝑛 が示せる  40頂点くらいあっても大丈夫 33
  34. 34. 探索アルゴリズムの計算量解析 もっと頑張ると…  次数最大の頂点で分岐することにすれば,最大次 数が2以下のグラフ(閉路orパス)は多項式時間で 解けるので, 𝑐 𝑛 ≥ 𝑐 𝑛−1 + 𝑐 𝑛−4 𝑛  𝑂 1.381 ⁡𝑛 が示せる 最悪ケースは・・・?  よく分からない 34
  35. 35. 余談 現在計算量的に最もよい最大独立集合のアルゴリズ ムは𝑂∗ (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
  36. 36. 余談 SETH (Strong Exponential Time Hypothesis)  SATを𝑂 2− 𝜖 𝑛 時間で解くアルゴリズムは存在 しない • ETHの更に強い版 SETHの仮定のもので,様々な問題に対して計算量の 下界を証明できる  下界と上界が一致する問題はあまりない • 帰着により問題サイズが大きくなるため 36
  37. 37. FPTアルゴリズムFPTとは,有界探索木,カーネル 37
  38. 38. FPTアルゴリズム FPTアルゴリズムとは?  FPT: Fixed Parameter Tractable  入力サイズとは独立なパラメータ𝑘に関してのみ指 数時間のアルゴリズム • 計算量の例: 𝑂 2 𝑘 ⁡𝑛 など • パラメータの例: グラフの幅,解の大きさ,など 38
  39. 39. FPT: 最小頂点被覆問題 頂点の部分集合𝑆で,どの辺もその端点の少なくとも 一方が𝑆に属しているような最小のものを求める 1 2 0 3 5 4 39
  40. 40. FPT: 最小頂点被覆問題 頂点の部分集合𝑆で,どの辺もその端点の少なくとも 一方が𝑆に属しているような最小のものを求める 1 2 0 3 5 4 40
  41. 41. FPT: 最小頂点被覆問題 最大独立集合に帰着  𝑆が頂点被覆⇔𝑉 ∖ 𝑆が独立集合 𝑛  探索アルゴリズムを用いて𝑂 𝑐 で解ける 𝑆 ≤ 𝑘の頂点被覆が存在するか判定  ナイーブな解法 • 全ての選び方を試す • 𝑂 𝑛 𝑘+1  有界探索木 • 𝑂 2 𝑘 𝑛 で解ける (FPT) • グラフが大きくてもあまり問題無い 41
  42. 42. 有界探索木 辺𝑒 = 𝑢, 𝑣 を一つ選び,𝑢を使うケースと𝑣を使う ケースに分岐する  𝑒を被覆するためには,必ずどちらかは使う必要が ある  𝑢を使う場合,𝑢と隣接する辺を取り除き,𝑘を1減ら す 𝑢 𝑢 𝑢 𝑣 𝑣 𝑣 42
  43. 43. 有界探索木 毎回𝑘は1減るため,探索木の深さは高々𝑘  計算量は𝑂 2 𝑘 ⁡𝑛 最大独立集合の探索アルゴリズムのときと同様に,𝑘 の底をもっと小さくすることが可能  𝑂 1.466 𝑘 ⁡𝑛  1000頂点のグラフから,サイズ30以下の頂点被覆 を求めることが可能 43
  44. 44. 有界探索木 分岐不要なケース  次数1以下の点: 除去して良い 𝑣 𝑣 𝑢 𝑢 44
  45. 45. 有界探索木 頂点𝑣を一つ選び,𝑣を使わないケースと使うケース に分岐する  𝑣を使わない場合,𝑣の隣接点を全て使う  𝑣を使う場合,𝑣と接続する辺を取り除く 𝑣 𝑣 𝑣 45
  46. 46. FPT: カーネル 最大独立集合の探索アルゴリズムに加え,サイズ𝑘 以下の解が欲しいので,以下のルールを追加できる 分岐不要なケース  次数𝑘 + 1以上の点: 必ず使うとしてよい • 使わない場合,隣接する𝑘 + 1点を使う必要がある このルールを繰り返し適用した後,全ての頂点の次 数は𝑘以下となり,もし辺数が𝑘 2 より多ければ,その 時点で解が存在しないことがわかる 46
  47. 47. FPT: カーネル つまり,𝑂(𝑘𝑛) 時間の前処理で,𝑛′ ≤ 2𝑘 2 , 𝑘 ′ ≤ 𝑘の 問題に変換することが出来る  この前処理を行った後で,有界探索木法を用いれ 𝑘 2 ば,全体の計算量は 𝑂 1.466 ⁡𝑘 + 𝑘𝑛  100万頂点のグラフから,サイズ30以下の頂点被 覆を求めることが可能! このように,多項式時間の前処理を行うことで,問題 サイズを𝑘の関数𝑓(𝑘)以下にまで小さくする手法を カーネライズと呼び,小さくなった問題をカーネルと呼 ぶ 47
  48. 48. 余談 ある問題がFPTであることと,カーネライズできること は同値  ⇒: 𝑓 𝑘 𝑝 𝑛 で解けるとき,𝑛 ≤ 𝑓 𝑘 ならばサイズ 𝑓(𝑘)のカーネルが存在し,𝑛 > 𝑓(𝑘)ならば 𝑓 𝑘 𝑝 𝑛 は𝑛に関する多項式時間なので前処理 の中で完全に解くことが出来る  ⇐: カーネルを愚直に解けばよい ただし,指数サイズのカーネルなので実用上は役に 立たず,多項式サイズのカーネルがあるかはまた別 の問題 48
  49. 49. 余談 現在計算量的に最も優れた最小頂点被覆の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
  50. 50. FPT: シュタイナー木問題 辺の部分集合であって,与えられた𝑘点のターミナル を連結にする最小のものを求める t t t t 50
  51. 51. FPT: シュタイナー木問題 辺の部分集合であって,与えられた𝑘点のターミナル を連結にする最小のものを求める t t t t 51
  52. 52. FPT: シュタイナー木問題 おそらく,コンテストで最もよく出題されているFPTの 問題 ターミナル数𝑘に関してFPT 動的計画法を用いて𝑂 3 𝑘 𝑛 + 2 𝑘 𝑚 で解ける 52
  53. 53. 動的計画法 𝑑𝑝 𝑆 𝑣 : ⁡ターミナル集合𝑆と頂点𝑣を連結にする 最小の辺数 (𝑣はターミナルに限らない) 𝑢 𝑣 𝑣 ? 𝑇 ? ? 𝑆∖ 𝑇 𝑆 𝑑𝑝 𝑆 𝑣 = min⁡ min 𝑑𝑝 𝑆 𝑢 + 1| 𝑢, 𝑣 ∈ 𝐸 , ( ※ループしているので min 𝑑𝑝 𝑇 𝑣 + 𝑑𝑝 𝑆 ∖ 𝑇 𝑣 𝑇 ⊆ 𝑆}) 幅優先で行う 53
  54. 54. 包除原理数え上げ,畳込み 54
  55. 55. 包除原理 𝑓 𝑆 = 𝑔(𝑇) , 𝑔 𝑆 = −1 𝑆 −|𝑇| 𝑓(𝑇) 𝑇⊆𝑆 𝑇⊆𝑆 指数時間アルゴリズムにおいて,包除原理は非常に 強力なツール 応用例  ハミルトンパスを多項式空間で  グラフ彩色問題  動的計画法を高速化 (畳込み) 55
  56. 56. 包除原理 𝑓 𝑆 = 𝑔(𝑇) , 𝑔 𝑆 = −1 𝑆 −|𝑇| 𝑓(𝑇) 𝑇⊆𝑆 𝑇⊆𝑆 𝑆 −|𝑇|  𝑔 𝑆 = 𝑇⊆𝑆 −1 𝑋⊆𝑇 𝑔(𝑋) 𝑆− 𝑇 = 𝑋⊆𝑆 𝑋⊆𝑇⊆𝑆 −1 𝑔(𝑋) = 𝑔(𝑆)  𝑔を計算したいが,直接は難しい時に,その和𝑓を 計算することが出来れば2 𝑛 回𝑓を計算することで𝑔 が求まる  𝑔 → 𝑓: ゼータ変換,𝑓 → 𝑔: メビウス変換 • どちらも2 𝑛 で計算できる • 高速ゼータ・メビウス変換 56
  57. 57. 包除原理: ハミルトンパス ハミルトンパスを求めるのは難しいが,長さ𝑛 − 1の (単純とは限らない)𝑠−𝑡パスの個数を求めるのは簡単  単純な動的計画法で求まる 𝑔 𝑆 ≔ 𝑆のみを通り,かつ𝑆を全て通る長さ𝑛 − 1の 𝑠−𝑡パスの個数  𝑔(𝑉) := 𝑠−𝑡ハミルトンパスの個数 𝑓 𝑆 = 𝑇⊆𝑆 𝑔(𝑇)  𝑆のみを通る長さ𝑛 − 1の𝑠−𝑡パスの個数 𝑂 2 𝑛 ⁡𝑛𝑚 time, 𝑂(𝑛) space 57
  58. 58. 包除原理: 彩色数 隣接する頂点が異なる色となるように彩色するため に必要な最小色数を求める 1 2 0 3 5 4 58
  59. 59. 包除原理: 彩色数 隣接する頂点が異なる色となるように彩色するため に必要な最小色数を求める 1 2 0 3 5 4 59
  60. 60. 包除原理: 彩色数 ナイーブな方法  色の塗り方を全通り試す 𝑛  𝑂 𝑘 , k:答え 動的計画法  一色ずつ一気に塗る  𝑑𝑝[𝑆]: 𝑆を彩色する最小色数 • 𝑑𝑝 𝑆 = min 𝑑𝑝 𝑇 + 1⁡ ⁡ 𝑆 ∖ 𝑇が独立集合}  𝑂 3𝑛 包除原理 𝑛  𝑂 2 ⁡𝑛 で解ける 60
  61. 61. 包除原理: 彩色数 グラフ𝐺 = (𝑉, 𝐸)が𝑘彩色可能⇔𝑉を𝑘個の独立集合 で被覆できる  独立集合から𝑘個選んで𝑉を覆う方法の総数を数 えることが出来れば良い 𝑔 𝑆 ≔ 独立集合から𝑘個選んでSをちょうど覆う方法 の総数 𝑓 𝑆 = 𝑇⊆𝑆 𝑔(𝑇)  𝑆の部分集合で独立なもの𝑘個選ぶ方法の総数 61
  62. 62. 包除原理: 彩色数 𝐼 𝑆 : 𝑆の部分集合で独立なものの個数とすると, 𝑓 𝑆 = 𝐼 𝑆 𝑘  𝐼 𝑆 = 𝐼 𝑆∖ 𝑣 + 𝐼 𝑆 ∖ 𝑁 𝑣 という漸化式から 𝑂(2 𝑛 𝑛)時間で全ての𝑆 ⊆ 𝑉について計算可能 実は,彩色方法の総数を求めることも可能  𝑔 𝑆 ≔ 独立集合から𝑘個,サイズの総和が𝑛と なるように選んでSをちょうど覆う方法の総数  𝑓(𝑆)の計算はDPをすればよい 62
  63. 63. 包除原理: 高速ゼータ変換 𝑓𝜁 𝑆 = 𝑓 𝑇 𝑇⊆𝑆 𝑣を含まない 𝑓1 𝑔1 𝑔1 = 𝑓1 𝜁 これを再利用すればよい 𝜻 𝑣を含む 𝑓2 𝑔2 𝑔2 = 𝑓1 𝜁 + 𝑓2 𝜁 𝑓 𝑔 63
  64. 64. 包除原理: 畳込み 関数𝑓(𝑆), 𝑔(𝑆)から 𝑓∘ 𝑔 𝑆 = 𝑓 𝑇 𝑔(𝑆 ∖ 𝑇) 𝑇⊆𝑆 を計算する操作を畳込みと呼ぶ 単純には𝑂 3 𝑛 で可能 実は𝑂 2 𝑛 で行うことが出来る これを応用すると,色々な部分集合に対するDPを高 速化することができる 𝑘 𝑘  例: シュタイナー木を3 から2 に min 𝑑𝑝 𝑇 𝑣 + 𝑑𝑝 𝑆 ∖ 𝑇 𝑣 𝑇 ⊆ 𝑆} 64
  65. 65. 包除原理: 畳込み 𝑓∘ 𝑔 𝑆 = 𝑓 𝑇 𝑔(𝑆 ∖ 𝑇) 𝑇⊆𝑆𝑣を含まない ℎ1 = 𝑓1 ∘ 𝑔1 𝑓1 𝑔1 ℎ1 ℎ2 = 𝑓1 ∘ 𝑔2 + 𝑓2 ∘ 𝑔1 𝑣を含む 𝑓2 𝑔2 ℎ2 𝑓 𝑔 𝑓∘ 𝑔 65
  66. 66. 包除原理: 畳込み ℎ1 = 𝑓1 ∘ 𝑔1 , ℎ2 = 𝑓1 ∘ 𝑔2 + 𝑓2 ∘ 𝑔1  半分の大きさのを3回計算するので3 𝑛  なんとか2回でできないか? ℎ2 𝑥 + 𝑓2 ∘ 𝑔2 𝑥 2 = 𝑓1 + 𝑓2 𝑥 ∘ 𝑔1 + 𝑔2 𝑥 − ℎ1  値を𝑥の多項式に拡張: 𝑓𝑥 𝑆 = 𝑓 𝑆 𝑥  𝑓 ∘ 𝑔の代わりに, 𝑓 ∘ 𝑔 𝑥 + ゴミ𝑥 を求めること 2 ができた 𝑛  気にせず進めると最終的に 𝑓 ∘ 𝑔 𝑥 + ゴミ が得られ,ゴミの項は𝑥 𝑛+1 以上なので𝑥 𝑛 の係数を 取り出せば良い 66
  67. 67. 包除原理: 畳込み {} 1 2 {0} 3 3 {1} 2 1 {0,1} 4 4 𝑓 𝑔 67
  68. 68. 包除原理: 畳込み {} 1 2 1 2 {0} 3 3 3 3 {1} 2 1 1 + 2𝑥 2+ 𝑥 {0,1} 4 4 3 + 4𝑥 3 + 4𝑥 𝑓 𝑔 68
  69. 69. 包除原理: 畳込み 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
  70. 70. 包除原理: 畳込み 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
  71. 71. 包除原理: 畳込み 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
  72. 72. 包除原理: 畳込み {} 1 2 2 {0} 3 3 9 {1} 2 1 5 {0,1} 4 4 21 𝑓 𝑔 𝑓∘ 𝑔 72
  73. 73. 余談 包除原理の指数時間アルゴリズムへの適用は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 onSteiner Tree and Related Problems. ICALP 2009 73
  74. 74. おまけ 74
  75. 75. おまけ: 完全マッチングの個数 𝑛 完全マッチングの個数は𝑂∗ 2 で求めることが可能 2 1 2 0 3 5 4 [7] Andreas Björklund: Counting perfect matchings as fast as Ryser. SODA 2012 75
  76. 76. おまけ: 完全マッチングの個数 𝑛 完全マッチングの個数は𝑂∗ 2 で求めることが可能 2 1 2 0 3 5 4 [7] Andreas Björklund: Counting perfect matchings as fast as Ryser. SODA 2012 76
  77. 77. おまけ: 完全マッチングの個数 𝑛 完全マッチングの個数は𝑂∗ 2 で求めることが可能 2 1 2 0 3 5 4 [7] Andreas Björklund: Counting perfect matchings as fast as Ryser. SODA 2012 77
  78. 78. おまけ: 完全マッチングの個数 𝑛 完全マッチングの個数は𝑂∗ 2 で求めることが可能 2 1 2 0 3 5 4 [7] Andreas Björklund: Counting perfect matchings as fast as Ryser. SODA 2012 78
  79. 79. おまけ: 完全マッチングの個数 頂点を二つ取り除き,ラベルに置き換える 1 2 0 3 5 4 79
  80. 80. おまけ: 完全マッチングの個数 マッチングにラベルaのついた辺25を使う→元のグラ フで辺05,12を使う 2 ※ラベル無しの辺と 1 ラベルaの辺があるの意味 ε+a ε+a a 3 0 5 4 ε+a 80
  81. 81. おまけ: 完全マッチングの個数 もとのグラフでの完全マッチングの個数=新しいグラ フでラベルaをちょうど一回使う完全マッチングの個数 2 1 ε+a ε+a a 3 0 5 4 ε+a 81
  82. 82. おまけ: 完全マッチングの個数 もとのグラフでの完全マッチングの個数=新しいグラ フでラベルabをちょうど一回ずつ使う完全マッチング の個数 2 1 ε+b ε+a 0 3 5 4 ε+a+b+ab 82
  83. 83. おまけ: 完全マッチングの個数 もとのグラフでの完全マッチングの個数=新しいグラ フでラベルabcをちょうど一回ずつ使う完全マッチング の個数 → これは包除原理で2 𝐿 で求まる (𝐿 = 𝑛 ) 2 2 1 ε+b ε+a 4通り! 0 3 5 4 ε+c+ac+bc+abc 83
  84. 84. おまけ: Color Coding k-Cycle  グラフに長さ𝑘の単純な閉路が含まれるか判定し たい  𝑘 = 𝑛のときハミルトン閉路問題  ナイーブな解法: 𝑂 𝑛𝑘  FPT: 𝑂 2𝑒 𝑘 𝑚 で解ける 3 𝑘 余談: 現在最速は2 4 84
  85. 85. おまけ: Color Coding 頂点をランダムに𝑘色で塗り,各色をちょうど一度ず つ通る閉路があるか調べる 1 2 0 3 5 4 85
  86. 86. おまけ: Color Coding 頂点をランダムに𝑘色で塗り,各色をちょうど一度ず つ通る閉路があるか調べる  これは単純なDPで𝑂 2 𝑘 ⁡𝑚 で解ける ある長さ𝑘に閉路上の頂点が全て異なる色で塗られ 𝑘! る確率は, 𝑘 𝑘 ≈ 2𝜋𝑘𝑒 −𝑘 𝑒 𝑘 回繰り返せば十分な確率で正しく求まる 86
  87. 87. おまけ: Bandwidth 頂点を一列に並べ,一番長い辺の長さを最小化する 0 1 2 10 5 3 2 5 4 4 3 87
  88. 88. おまけ: Bandwidth ナイーブな解法: 𝑛! とても賢い動的計画法を用いると5 𝑛 で解ける k以下の解があるかを判定して二分探索する [8] Marek Cygan, Marcin Pilipczuk: Even Faster Exact Bandwidth. ACM Transactions on Algorithms 8(1) (2012) 88
  89. 89. おまけ: Bandwidth 1~𝑛を𝑘 + 1個ずつに区切る 1 2 3 4 5 6 7 8 9 頂点をどの区間に割り当てるか全通り試す  隣接する頂点は,同じ区間か隣の区間にしか入れ 𝑛 ないので高々3 通り 1 → 𝑘 + 2 → ⋯ → 2 → 𝑘 + 3 → ⋯ という順に頂点を 置いていく 89
  90. 90. おまけ: Bandwidth すでに置いた頂点の並び順は無視することができる 1 2 3 4 5 6 7 8 9 距離2以下の区間 よってどの頂点を置いたかで2 𝑛 のDPが可能 区間への割り当てとDPでの状態を同時に考えると実 は状態数は5 𝑛 しかないことが示せる 90
  91. 91. おまけ: Cut & Count グリッドグラフ上のシュタイナー木問題 𝑤  幅wに対して𝑐 で解きたい t t t 91
  92. 92. おまけ: Cut & Count グリッドグラフ上のシュタイナー木問題 𝑤  幅wに対して𝑐 で解きたい t t t 92
  93. 93. おまけ: Cut & Count グリッドグラフ上のシュタイナー木問題 𝑤  幅wに対して𝑐 で解きたい  ナイーブにやると,どことどこがつながっているか 𝑤 の情報が必要→𝑤 とかになってしまう Cut & Count  包除原理的なキャンセリング手法を用いる[9] Marek Cygan et al.: Solving Connectivity Problems Parameterized by Treewidth in SingleExponential Time. FOCS 2011 93
  94. 94. おまけ: Cut & Count 連結な解を求めるのではなく,解とその頂点を二つ のバッグに分割する方法のペアの総数を数える  ただし,ある頂点はバッグ1に必ず入れる  連結ならば分け方は一通り  非連結ならば分け方は偶数通り 0 0 94
  95. 95. おまけ: Cut & Count 連結な解を求めるのではなく,解とその頂点を二つ のバッグに分割する方法のペアの総数を数える  ただし,ある頂点はバッグ1に必ず入れる  連結ならば分け方は一通り  非連結ならば分け方は偶数通り 解が奇数個ならば,正しく求まる  偶数個ある場合は,ランダムに重み付けすると十 分な確率で奇数にできる (Isolation Lemma) 95
  96. 96. おまけ: Iterative Compression Feedback頂点集合問題  グラフから𝑘点取り除いて木にできるか判定 1 2 0 3 5 4 96
  97. 97. おまけ: Iterative Compression Feedback頂点集合問題  グラフから𝑘点取り除いて木にできるか判定 1 2 0 3 5 4 97
  98. 98. おまけ: Iterative Compression 頂点{𝑣1 , … , 𝑣 𝑖−1 }からなるグラフ𝐺 𝑖−1 に対する解𝐹𝑖−1 から頂点𝑣 𝑖 を追加したグラフ𝐺 𝑖 に対する解𝐹𝑖 を構築す る  𝐹 𝑖−1 ∪ 𝑣 𝑖 の大きさは高々𝑘 + 1で,これを𝐺 𝑖 から 取り除くと残りは木になる  つまり,木幅が小さい • Cut & Countを用いると3 𝑘 時間でサイズ𝑘の解が求まる 𝐺𝑖 𝐺 𝑖−1 𝑣𝑖 𝐹𝑖−1 木 98

×