SlideShare a Scribd company logo
1 of 12
分割木
~明日から使えないオーダーがやばそうな木~
劉 鴻志@hogloid
問題概要
 2次元平面上にN点があります
 直線で区切られた半平面内にある、点の数を数え
たい
 点は固定されていて、直線は色々なものが来る
(クエリーみたいに)
 クエリー毎にO(N)より早く!!
 半平面ができれば、同じように三角形ができて、
三角形ができれば多角形もできて変なのも大体近
似できます
どうしよう??
 簡単のためN=m^4とします
 2次元の領域を扱うとき、分割統治を使うことが多
い
 これも分割統治でできるのでは??
 唐突ですが、N点を交わらない2直線で4つの領域に
分け、それぞれの4つの領域にN/4点が属するよう
にしてみましょう
 この分割を、一つの領域が一つの点を持つように
なるまで繰り返します
例
何がうれC?
 半平面を区切る直線が、それぞれの4つに分割され
た領域をすべて含むならその領域の点の数を加算
すべて含まないなら無視
 交差しているなら、再帰的に計算
 毎回、交差する領域の数は4つ中3つ
 もっとも再帰が下ったとき、訪れる葉っぱの数は
3^m
 これがボトルネックなので、O(3^m)=O(3^(log_4
n))=O(n^(log_4 3))≒O(n^0.7925)
構築
 N点を2直線で4つの同じ数の点を含む領域に分けれ
ばよい
 N点をY座標順でソートし、0-originでN/2番目のY座
標でX軸と並行の線を一つ引いてみる
 紫を青にして水色にして・・・こうじゃ!
 上の領域で、N/4番目の点のY座標で線を引く
 上の領域で、片方の領域がN/4個の状態が維持されるよ
うに、少しずつ回転
構築
 1回上の領域から出ていく点はもう入ってこないし、左
下の領域には点が入っていくだけ
 毎回、次の点を探すのにO(N)かかるので、合計O(N^2)
 N頂点ある時にかかる計算量をc2(N)とおくと、
c2(N)=O(N^2)+4*c2(N/4)
 再帰が下るたびに、計算量は4/(4*4)=1/4倍になるので、
O(N^2)+O(N^2)/4+O(N^2)/16…
 これより、O(N^2)
 (空間計算量は、葉っぱノード以外点の場所を陽に持つ
必要がないので、O(N))
ベンチマーク
 N=4096(=4^6)、クエリーを10000回投げてみる
 O(N)愚直解は約2秒、今回の方法は約6秒
 毎回交点計算などするし、しょうがないね
おまけ
 O(N^2)の構築でやったことより、X軸に平行に一つ同じ
ように直線を引いても、2本目は上側/下側の両方の点を
通るものが必ずある(直線上のものは、どちらに属する
としても構わない)
 下側の通る点pを固定し、上側の点をpから見た角度で
ソートすると、2本目の直線は0-originでN/4-1 or N/4 番
目の点とpを結んだもの
 これが下側の領域も二つに分けているか確認すればよい
 これでO(N^2logN)
おまけ2
 情オリ夏セミisGOD(日並感)
 気づいたら3年間連続で出ていました 最高の夏に
出来ました、今まで本当に楽しかったです!!!
 来年はチューターとして参加できるとうれしいナ
~~
 受験こわい><><><><><><><><>
<
 キルミーベイベーとても面白い

More Related Content

What's hot

池袋数学勉強会 対馬龍司 線形代数学講義 3章章末問題解説
池袋数学勉強会 対馬龍司 線形代数学講義 3章章末問題解説池袋数学勉強会 対馬龍司 線形代数学講義 3章章末問題解説
池袋数学勉強会 対馬龍司 線形代数学講義 3章章末問題解説GM3D
 
20140914_曲面上の「直線」と「最短線」
20140914_曲面上の「直線」と「最短線」20140914_曲面上の「直線」と「最短線」
20140914_曲面上の「直線」と「最短線」matsumoring
 
線形写像を行列で表現しよう
線形写像を行列で表現しよう線形写像を行列で表現しよう
線形写像を行列で表現しようHanpenRobot
 
CODE FESTIVAL 2014 エキシビジョン 解説
CODE FESTIVAL 2014 エキシビジョン 解説CODE FESTIVAL 2014 エキシビジョン 解説
CODE FESTIVAL 2014 エキシビジョン 解説AtCoder Inc.
 
高認数学 第1回 式の計算
高認数学 第1回 式の計算高認数学 第1回 式の計算
高認数学 第1回 式の計算yanai_compass
 
双曲平面のモデルと初等幾何
双曲平面のモデルと初等幾何双曲平面のモデルと初等幾何
双曲平面のモデルと初等幾何matsumoring
 
VBAで数値計算 03 数式実装パターン
VBAで数値計算 03 数式実装パターンVBAで数値計算 03 数式実装パターン
VBAで数値計算 03 数式実装パターンKatsuhiro Morishita
 
Replace
ReplaceReplace
Replaceoupc
 
VBAで数値計算 10 逆行列と疑似逆行列
VBAで数値計算 10 逆行列と疑似逆行列VBAで数値計算 10 逆行列と疑似逆行列
VBAで数値計算 10 逆行列と疑似逆行列Katsuhiro Morishita
 

What's hot (13)

池袋数学勉強会 対馬龍司 線形代数学講義 3章章末問題解説
池袋数学勉強会 対馬龍司 線形代数学講義 3章章末問題解説池袋数学勉強会 対馬龍司 線形代数学講義 3章章末問題解説
池袋数学勉強会 対馬龍司 線形代数学講義 3章章末問題解説
 
20140914_曲面上の「直線」と「最短線」
20140914_曲面上の「直線」と「最短線」20140914_曲面上の「直線」と「最短線」
20140914_曲面上の「直線」と「最短線」
 
線形写像を行列で表現しよう
線形写像を行列で表現しよう線形写像を行列で表現しよう
線形写像を行列で表現しよう
 
ACPC 2019 Day3 A: 間違い探し
ACPC 2019 Day3 A: 間違い探しACPC 2019 Day3 A: 間違い探し
ACPC 2019 Day3 A: 間違い探し
 
CODE FESTIVAL 2014 エキシビジョン 解説
CODE FESTIVAL 2014 エキシビジョン 解説CODE FESTIVAL 2014 エキシビジョン 解説
CODE FESTIVAL 2014 エキシビジョン 解説
 
テンソル代数
テンソル代数テンソル代数
テンソル代数
 
Sengoku
SengokuSengoku
Sengoku
 
高認数学 第1回 式の計算
高認数学 第1回 式の計算高認数学 第1回 式の計算
高認数学 第1回 式の計算
 
双曲平面のモデルと初等幾何
双曲平面のモデルと初等幾何双曲平面のモデルと初等幾何
双曲平面のモデルと初等幾何
 
PRMLrevenge_3.3
PRMLrevenge_3.3PRMLrevenge_3.3
PRMLrevenge_3.3
 
VBAで数値計算 03 数式実装パターン
VBAで数値計算 03 数式実装パターンVBAで数値計算 03 数式実装パターン
VBAで数値計算 03 数式実装パターン
 
Replace
ReplaceReplace
Replace
 
VBAで数値計算 10 逆行列と疑似逆行列
VBAで数値計算 10 逆行列と疑似逆行列VBAで数値計算 10 逆行列と疑似逆行列
VBAで数値計算 10 逆行列と疑似逆行列
 

分割木