Upgrade to Pro — share decks privately, control downloads, hide ads and more …

divide-and-conquer

Avatar for autumn_eel autumn_eel
October 11, 2020
110

 divide-and-conquer

Avatar for autumn_eel

autumn_eel

October 11, 2020

Transcript

  1. 列の分割統治 • マージソートのアルゴリズム 4 2 6 7 5 1 8

    3 長さ4の列をソートせよという小さな問題に変換
  2. 列の分割統治 • マージソートのアルゴリズム 4 2 6 7 5 1 8

    3 長さ4の列をソートせよという小さな問題に変換
  3. 列の分割統治 • マージソートのアルゴリズム 4 2 6 7 5 1 8

    3 「長さ1の列をソートする」という問題はすでに解けている!
  4. 列の分割統治 • マージソートのアルゴリズム 4 2 6 7 5 1 8

    3 「長さ1の列をソートする」という問題はすでに解けている!
  5. 列の分割統治 • マージソートのアルゴリズム 2 4 6 7 1 5 3

    8 今度は解いた小さな問題を大きな問題にまとめていく
  6. 列の分割統治 • マージソートのアルゴリズム 2 4 6 7 1 5 3

    8 今度は解いた小さな問題を大きな問題にまとめていく
  7. 「列の分割統治」とデータ構造 • 例: 区間 [1, 8) (0-indexed) に含まれる6以下の数の個数 4 2

    6 7 5 1 8 3 2 4 6 7 1 5 3 8 2 4 6 7 1 3 5 8 1 2 3 4 5 6 7 8 それぞれの区間において 「6以下の個数」を二分探索で求め、 それらを足せばOK
  8. 木の分割統治 • 距離が4以下のペアの数を求めたい 9 8 7 6 5 4 3

    2 1 10 分割した後の木のサイズがもとの半分以下になるような 頂点 (重心) を選ぶ
  9. 木の分割統治 • 距離が4以下のペアの数を求めたい 9 8 7 6 5 4 2

    1 10 マークされた頂点を通るパスで、 距離が4以下のものを数えながら 足していく
  10. 「木の分割統治」とデータ構造 • 頂点10からの距離の総和を求める (個数, 総和) (1,2) (1,0) (1,1) (1,2) (2,3)

    (1,2) (1,0) (1,1) 1*1+2=3 3*1+2=5 3*2+3=9 9-5+3=7 (ダブりを引かなければ ならないことに注意)