×
Copy
Open
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Looking for Challenge 小倉拳 @catupper
Slide 2
Slide 2 text
Looking for Challenge グラフ理論
Slide 3
Slide 3 text
問題 ● 頂点数がN、辺の数がMのグラフが与えられる ● 互いに隣接している3頂点を全て見つけよ
Slide 4
Slide 4 text
問題 ● 頂点数がN、辺の数がMのグラフが与えられる ● 互いに隣接している3頂点を全て見つけよ
Slide 5
Slide 5 text
問題 ● 頂点数がN、辺の数がMのグラフが与えられる ● 互いに隣接している3頂点を全て見つけよ ● 一つ
Slide 6
Slide 6 text
問題 ● 頂点数がN、辺の数がMのグラフが与えられる ● 互いに隣接している3頂点を全て見つけよ ● 二つ
Slide 7
Slide 7 text
問題 ● 頂点数がN、辺の数がMのグラフが与えられる ● 互いに隣接している3頂点を全て見つけよ ● たくさん
Slide 8
Slide 8 text
Looking for Challenge グラフ理論 列挙
Slide 9
Slide 9 text
第一の疑問 ● 頂点数がN、辺の数がMのグラフが与えられる ● 互いに隣接している3頂点を列挙せよ ● 最大で何個くらいあるの?
Slide 10
Slide 10 text
第一の補題 ● 辺の数がMのグラフの中にある三角形の個数は たかだかM√(2M)個
Slide 11
Slide 11 text
第一の補題 ● 辺の数がMのグラフの中にある三角形の個数は たかだかM√(2M)個 ● 証明しよう! ● 証明は2通り 1.バリバリのグラフ理論 2.不等式をこねる
Slide 12
Slide 12 text
第一の補題 ● 辺の数がMのグラフの中にある三角形の個数は たかだかM√(2M)個 ● 証明しよう! ● 証明は2通り 1.バリバリのグラフ理論 2.不等式をこねる
Slide 13
Slide 13 text
Looking for Challenge グラフ理論 列挙
Slide 14
Slide 14 text
バリバリのグラフ理論 ● 命題:辺の数がMのグラフのなかで最も次数が小さ い頂点の次数は√(2M)を超えない – 頂点の次数というのはそれに繋がっている辺の数↓
Slide 15
Slide 15 text
バリバリのグラフ理論 ● 命題:辺の数がMのグラフのなかで最も次数が小さ い頂点の次数は√(2M)を超えない – 頂点の次数というのはそれに繋がっている辺の数↓ – 次数の総和は2Mと一致する
Slide 16
Slide 16 text
バリバリのグラフ理論 ● 命題:辺の数がMのグラフのなかで最も次数が小さ い頂点の次数は√(2M)を超えない – 頂点の次数というのはそれに繋がっている辺の数↓ – 次数の総和は2Mと一致する ● 背理法で証明 – 全て次数が√(2M)以上と仮定
Slide 17
Slide 17 text
バリバリのグラフ理論 ● 命題:辺の数がMのグラフのなかで最も次数が小さ い頂点の次数は√(2M)を超えない – 頂点の次数というのはそれに繋がっている辺の数↓ – 次数の総和は2Mと一致する ● 背理法で証明 – 全て次数が√(2M)以上と仮定 – 頂点数は√(2M)を超える
Slide 18
Slide 18 text
バリバリのグラフ理論 ● 命題:辺の数がMのグラフのなかで最も次数が小さ い頂点の次数は√(2M)を超えない – 頂点の次数というのはそれに繋がっている辺の数↓ – 次数の総和は2Mと一致する ● 背理法で証明 – 全て次数が√(2M)以上と仮定 – 頂点数は√(2M)を超える – 次数の総和が2Mを超える
Slide 19
Slide 19 text
バリバリのグラフ理論 ● グラフの中から最も次数が小さい頂点を選び、 それを含む三角形を列挙し、その頂点を消すと いう操作を考える – 隣接する辺も同時に消す
Slide 20
Slide 20 text
バリバリのグラフ理論 ● グラフの中から最も次数が小さい頂点を選び、 それを含む三角形を列挙し、その頂点を消すと いう操作を考える – 隣接する辺も同時に消す ● これを全頂点がなくなるまで繰り返す – 全ての三角形を漏れなく、重複なく列挙することが できる
Slide 21
Slide 21 text
Looking for Challenge グラフ理論 列挙
Slide 22
Slide 22 text
バリバリのグラフ理論 ● 辺に注目する ● ある辺eが消えるタイミングを考える – その辺がつなぐ頂点のうちどちらかが消えるとき ● vとする
Slide 23
Slide 23 text
バリバリのグラフ理論 ● 辺に注目する ● ある辺eが消えるタイミングを考える – その辺がつなぐ頂点のうちどちらかが消えるとき ● vとする – そのとき数えられる三角形の中でeを含むものはい くつあるか?
Slide 24
Slide 24 text
バリバリのグラフ理論 ● 辺に注目する ● ある辺eが消えるタイミングを考える – その辺がつなぐ頂点のうちどちらかが消えるとき ● vとする – そのとき数えられる三角形の中でeを含むものはい くつあるか? – eでない辺のうち少なくともひとつはvに隣接する – よってたかだかeの次数しかない
Slide 25
Slide 25 text
バリバリのグラフ理論 ● 辺に注目する ● ある辺eが消えるタイミングを考える – その辺がつなぐ頂点のうちどちらかが消えるとき ● vとする – そのとき数えられる三角形の中でeを含むものはい くつあるか? – eでない辺のうち少なくともひとつはvに隣接する – よってたかだかeの次数しかない – 命題1よりたかだか√(2M)
Slide 26
Slide 26 text
バリバリのグラフ理論 ● 例 ● 赤い辺について考 える ● 次数が4の頂点と共 に消えるとする
Slide 27
Slide 27 text
バリバリのグラフ理論 ● 例 ● 赤い辺について考 える ● 次数が4の頂点と共 に消えるとする ● この辺と頂点を含 む三角形はたかだ か4つ
Slide 28
Slide 28 text
バリバリのグラフ理論 ● 辺は全部でM個なので数えられる三角形はたか だかM√(2M)個 ● やったぜ
Slide 29
Slide 29 text
バリバリのグラフ理論 ● 辺は全部でM個なので数えられる三角形はたか だかM√(2M)個 ● やったぜ ● 頭が痛くてなってつらい
Slide 30
Slide 30 text
第一の補題 ● 辺の数がMのグラフの中にある三角形の個数は たかだかM√(2M)個 ● 証明しよう! ● 証明は2通り 1.バリバリのグラフ理論 2.不等式をこねる
Slide 31
Slide 31 text
不等式をこねる ● 次数がd[v]の頂点vを含む三角形はたかだか d[v]*d[v]/2個しかない – vに隣接する頂点から2つ選ぶ組み合わせ
Slide 32
Slide 32 text
不等式をこねる ● 辺の数がM個のグラフの頂点vを含む三角形は たかだかM個しかない – 頂点vとそれを含まない辺が与えられるとそれらを つかってたかだか1個しか三角形が作れない
Slide 33
Slide 33 text
不等式をこねる ● 辺がM個のグラフの次数がd[v]の頂点vを含む三 角形の個数はmin(d[v]*d[v]/2, M)個を超えない
Slide 34
Slide 34 text
不等式をこねる ● 辺がM個のグラフの次数がd[v]の頂点vを含む三 角形の個数はmin(d[v]*d[v]/2, M)個を超えない
Slide 35
Slide 35 text
不等式をこねる ● 辺がM個のグラフの次数がd[v]の頂点vを含む三 角形の個数はmin(d[v]*d[v]/2, M)個を超えない ● 全頂点で総和を取る – 次数の総和は 2Mなので
Slide 36
Slide 36 text
不等式をこねる ● 辺がM個のグラフの次数がd[v]の頂点vを含む三 角形の個数はmin(d[v]*d[v]/2, M)個を超えない ● やったぜ
Slide 37
Slide 37 text
第一の疑問 ● 頂点数がN、辺の数がMのグラフが与えられる ● 互いに隣接している3頂点を列挙せよ ● 最大で何個くらいあるの? – M√(2M)個
Slide 38
Slide 38 text
第二の疑問 ● 頂点数がN、辺の数がMのグラフが与えられる ● 互いに隣接している3頂点を列挙せよ ● どうやって列挙する?
Slide 39
Slide 39 text
実装の仕方 ● 「バリバリのグラフ理論」の取り除くやつを実 際に実装するだけ
Slide 40
Slide 40 text
実装の仕方 ● 「バリバリのグラフ理論」の取り除くやつを実 際に実装するだけ – 次数が最小の頂点を探す
Slide 41
Slide 41 text
実装の仕方 ● 「バリバリのグラフ理論」の取り除くやつを実 際に実装するだけ – 次数が最小の頂点を探す – それを含む三角形を全部列挙
Slide 42
Slide 42 text
実装の仕方 ● 「バリバリのグラフ理論」の取り除くやつを実 際に実装するだけ – 次数が最小の頂点を探す – それを含む三角形を全部列挙 – その頂点を消す
Slide 43
Slide 43 text
実装の仕方 ● 「バリバリのグラフ理論」の取り除くやつを実 際に実装するだけ – 次数が最小の頂点を探す – それを含む三角形を全部列挙 – その頂点を消す – 繰り返す
Slide 44
Slide 44 text
実装の仕方 ● 「バリバリのグラフ理論」の取り除くやつを実 際に実装するだけ – 次数が最小の頂点を探す – それを含む三角形を全部列挙 – その頂点を消す – 繰り返す – やったぜ
Slide 45
Slide 45 text
実装の仕方 ● 「バリバリのグラフ理論」の取り除くやつを実 際に実装するだけ – 次数が最小の頂点を探す ならしO(1) – それを含む三角形を全部列挙 O(d[v]^2 logM) – その頂点を消す ならしO(1) – 繰り返す – やったぜ?
Slide 46
Slide 46 text
実装の仕方 ● 「バリバリのグラフ理論」の取り除くやつを実 際に実装するだけ – 次数が最小の頂点を探す ならしO(1) – それを含む三角形を全部列挙 O(d[v]^2 logM) – その頂点を消す ならしO(1) – 繰り返す – 全部でO(M√MlogM)で残念ながら遅い
Slide 47
Slide 47 text
どうすればよいのか?
Slide 48
Slide 48 text
もっとバリバリの グラフ理論をする
Slide 49
Slide 49 text
もっとバリバリのグラフ理論 ● グラフの辺にループが出来ないように適当な向 きを付ける – DAGを作れば良い
Slide 50
Slide 50 text
もっとバリバリのグラフ理論 ● グラフの辺にループが出来ないように適当な向 きを付ける – DAGを作れば良い ● 三角形はすべてこの形になる
Slide 51
Slide 51 text
もっとバリバリのグラフ理論 ● グラフの辺にループが出来ないように適当な向 きを付ける – DAGを作れば良い ● 三角形はすべてこの形になる ● ある辺について始点と終点から 同じ頂点に辺が出ている時 ちょうど1個三角形がある
Slide 52
Slide 52 text
もっとバリバリのグラフ理論 ● グラフの辺にループが出来ないように適当な向 きを付ける – DAGを作れば良い ● 三角形はすべてこの形になる ● ある辺について始点と終点から 同じ頂点に辺が出ている時 ちょうど1個三角形がある ● 重複や漏れはない
Slide 53
Slide 53 text
Looking for Challenge グラフ理論 列挙
Slide 54
Slide 54 text
もっとバリバリのグラフ理論 ● 全ての辺について、その始点からも終点からも 点が出ている頂点を数え上げれば良い
Slide 55
Slide 55 text
もっとバリバリのグラフ理論 ● 全ての辺について、その始点からも終点からも 辺が出ている頂点を数え上げれば良い ● ここで計算量を考える ● 各辺についてその終点と始点から共通して出て いる頂点はflagを使って調べれば良い
Slide 56
Slide 56 text
もっとバリバリのグラフ理論 ● 全ての辺について、その始点からも終点からも 点が出ている頂点を数え上げれば良い ● ここで計算量を考える ● 各辺についてその終点と始点から共通して出て いる頂点はflagを使って調べれば良い ● 計算量はmax(始点の出次数、終点の出次数)
Slide 57
Slide 57 text
もっとバリバリのグラフ理論 ● 全ての辺について、その始点からも終点からも 点が出ている頂点を数え上げれば良い ● ここで計算量を考える ● 各辺についてその終点と始点から共通して出て いる頂点はflagを使って調べれば良い ● 計算量はmax(始点の出次数、終点の出次数) ● 出次数をおさえることに成功したら計算量が削 減される
Slide 58
Slide 58 text
もっとバリバリのグラフ理論 ● どうやって出次数を削減しようか?
Slide 59
Slide 59 text
Looking for Challenge グラフ理論 列挙
Slide 60
Slide 60 text
ひらめきのLooking for Challenge ● 元の無向グラフの頂点たちの次数を求める ● 各辺には次数が小さい方から大きい方に向きを 付ける
Slide 61
Slide 61 text
ひらめきのLooking for Challenge ● 元の無向グラフの頂点たちの次数を求める ● 各辺には次数が小さい方から大きい方に向きを 付ける ● これでDAGになるので先ほどの数え上げが使え る
Slide 62
Slide 62 text
ひらめきのLooking for Challenge ● 元の無向グラフの頂点たちの次数を求める ● 各辺には次数が小さい方から大きい方に向きを 付ける ● これでDAGになるので先ほどの数え上げが使え る ● 出次数はどうなるだろうか?
Slide 63
Slide 63 text
ひらめきのLooking for Challenge ● 命題1の証明を思い出す – 次数が√(2M)より大きい頂点は√(2M)個より少ない
Slide 64
Slide 64 text
ひらめきのLooking for Challenge ● 命題1の証明を思い出す – 次数が√(2M)より大きい頂点は√(2M)個より少ない ● 次数が√(2M)より小さい頂点はどんなふうに向 きを付けても出次数は√(2M)を超えない
Slide 65
Slide 65 text
ひらめきのLooking for Challenge ● 命題1の証明を思い出す – 次数が√(2M)より大きい頂点は√(2M)個より少ない ● 次数が√(2M)より小さい頂点はどんなふうに向 きを付けても出次数は√(2M)を超えない ● 次数が√(2M)より大きい頂点は自分より次数が 多い頂点にしか辺は出て行かない – √(2M)個もないので出自数は√(2M)を超えない
Slide 66
Slide 66 text
ひらめきのLooking for Challenge ● 次数が√(2M)より小さい頂点はどんなふうに向 きを付けても出次数は√(2M)を超えない ● 次数が√(2M)より大きい頂点は自分より次数が 多い頂点にしか辺は出て行かない – √(2M)個もないので出自数は√(2M)を超えない
Slide 67
Slide 67 text
ひらめきのLooking for Challenge ● どの頂点も出次数が√(2M)を超えない! ● さきほどの考察より全計算量はM√2M ● これは三角形の個数の最大値と一致するのでお およそ最適! ● やったぜ
Slide 68
Slide 68 text
テクニックまとめ ● 辺の数がMの単純なグラフのなかで次数が最小 のものはO(√M) – 三角形の個数はO(M√M) ● 次数が小さい方から大きい方に向きをつけると 全頂点の出次数をO(√M)に抑えられる。 ● min(a, b) ≦ √(ab)
Slide 69
Slide 69 text
Looking for Challenge 小倉拳 @catupper
Slide 70
Slide 70 text
今の発想を使う問題 ● Algorithmic Engagements 2009 Round6 – Cakes ● http://main.edu.pl/en/archive/pa/2009/cia ● 面白いのでやってみてね!
Slide 71
Slide 71 text
クリックしてタイトルの挿入! ご清聴ありがとうございました