Submit Search
Upload
直交領域探索
•
7 likes
•
12,623 views
O
okuraofvegetable
Follow
JOI夏季セミナー2016 コンピュータ・ジオメトリ
Read less
Read more
Food
Report
Share
Report
Share
1 of 57
Download now
Download to read offline
Recommended
プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~
Takuya Akiba
最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く
shindannin
勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは
Takuya Akiba
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
Takuya Akiba
指数時間アルゴリズム入門
指数時間アルゴリズム入門
Yoichi Iwata
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズム
Takuya Akiba
明日使えないすごいビット演算
明日使えないすごいビット演算
京大 マイコンクラブ
動的計画法を極める!
動的計画法を極める!
HCPC: 北海道大学競技プログラミングサークル
Recommended
プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~
Takuya Akiba
最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く
shindannin
勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは
Takuya Akiba
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
Takuya Akiba
指数時間アルゴリズム入門
指数時間アルゴリズム入門
Yoichi Iwata
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズム
Takuya Akiba
明日使えないすごいビット演算
明日使えないすごいビット演算
京大 マイコンクラブ
動的計画法を極める!
動的計画法を極める!
HCPC: 北海道大学競技プログラミングサークル
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
Takuya Akiba
様々な全域木問題
様々な全域木問題
tmaehara
平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズム
Takuya Akiba
色々なダイクストラ高速化
色々なダイクストラ高速化
yosupo
図と実装で理解する『木構造入門』
図と実装で理解する『木構造入門』
Proktmr
Rolling Hashを殺す話
Rolling Hashを殺す話
Nagisa Eto
Fractional cascading
Fractional cascading
Nariaki Tateiwa
目指せグラフマスター
目指せグラフマスター
HCPC: 北海道大学競技プログラミングサークル
モデル高速化百選
モデル高速化百選
Yusuke Uchida
Re永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライド
Masaki Hara
高速フーリエ変換
高速フーリエ変換
AtCoder Inc.
Convex Hull Trick
Convex Hull Trick
HCPC: 北海道大学競技プログラミングサークル
3次元の凸包を求める
3次元の凸包を求める
abc3141
最適化超入門
最適化超入門
Takami Sato
充足可能性問題のいろいろ
充足可能性問題のいろいろ
Hiroshi Yamashita
ドロネー三角形分割
ドロネー三角形分割
Yusuke Matsushita
Chokudai search
Chokudai search
AtCoder Inc.
PCL
PCL
Masafumi Noda
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps
MITSUNARI Shigeo
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Yusuke Uchida
楕円曲線入門トーラスと楕円曲線のつながり
楕円曲線入門トーラスと楕円曲線のつながり
MITSUNARI Shigeo
AtCoder Regular Contest 017
AtCoder Regular Contest 017
AtCoder Inc.
More Related Content
What's hot
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
Takuya Akiba
様々な全域木問題
様々な全域木問題
tmaehara
平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズム
Takuya Akiba
色々なダイクストラ高速化
色々なダイクストラ高速化
yosupo
図と実装で理解する『木構造入門』
図と実装で理解する『木構造入門』
Proktmr
Rolling Hashを殺す話
Rolling Hashを殺す話
Nagisa Eto
Fractional cascading
Fractional cascading
Nariaki Tateiwa
目指せグラフマスター
目指せグラフマスター
HCPC: 北海道大学競技プログラミングサークル
モデル高速化百選
モデル高速化百選
Yusuke Uchida
Re永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライド
Masaki Hara
高速フーリエ変換
高速フーリエ変換
AtCoder Inc.
Convex Hull Trick
Convex Hull Trick
HCPC: 北海道大学競技プログラミングサークル
3次元の凸包を求める
3次元の凸包を求める
abc3141
最適化超入門
最適化超入門
Takami Sato
充足可能性問題のいろいろ
充足可能性問題のいろいろ
Hiroshi Yamashita
ドロネー三角形分割
ドロネー三角形分割
Yusuke Matsushita
Chokudai search
Chokudai search
AtCoder Inc.
PCL
PCL
Masafumi Noda
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps
MITSUNARI Shigeo
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Yusuke Uchida
What's hot
(20)
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
様々な全域木問題
様々な全域木問題
平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズム
色々なダイクストラ高速化
色々なダイクストラ高速化
図と実装で理解する『木構造入門』
図と実装で理解する『木構造入門』
Rolling Hashを殺す話
Rolling Hashを殺す話
Fractional cascading
Fractional cascading
目指せグラフマスター
目指せグラフマスター
モデル高速化百選
モデル高速化百選
Re永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライド
高速フーリエ変換
高速フーリエ変換
Convex Hull Trick
Convex Hull Trick
3次元の凸包を求める
3次元の凸包を求める
最適化超入門
最適化超入門
充足可能性問題のいろいろ
充足可能性問題のいろいろ
ドロネー三角形分割
ドロネー三角形分割
Chokudai search
Chokudai search
PCL
PCL
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Similar to 直交領域探索
楕円曲線入門トーラスと楕円曲線のつながり
楕円曲線入門トーラスと楕円曲線のつながり
MITSUNARI Shigeo
AtCoder Regular Contest 017
AtCoder Regular Contest 017
AtCoder Inc.
凸包
凸包
Yasutaka Hiraki
At coder regular contest 013 解説
At coder regular contest 013 解説
光喜 濱屋
「現実世界に活かす数学」 (麻布高等学校、教養総合、数学講義 5 回目)
「現実世界に活かす数学」 (麻布高等学校、教養総合、数学講義 5 回目)
Kensuke Otsuki
WUPC2012
WUPC2012
Dai Hamada
暗号技術の実装と数学
暗号技術の実装と数学
MITSUNARI Shigeo
CODE THANKS FESTIVAL 2014 A日程 解説
CODE THANKS FESTIVAL 2014 A日程 解説
AtCoder Inc.
ニューラル論文を読む前に
ニューラル論文を読む前に
Hayahide Yamagishi
わんくま勉強会東京#82 あおいたんのパズルを数学しましょうか
わんくま勉強会東京#82 あおいたんのパズルを数学しましょうか
Masami Yabushita
AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説
AtCoder Inc.
T82 aoitan あおいたんのパズルを数学しましょうか_修正版
T82 aoitan あおいたんのパズルを数学しましょうか_修正版
Masami Yabushita
自然言語処理のための機械学習入門1章
自然言語処理のための機械学習入門1章
Hiroki Mizukami
CODE FESTIVAL 2015 沖縄ツアー 解説
CODE FESTIVAL 2015 沖縄ツアー 解説
AtCoder Inc.
Naivebayes
Naivebayes
ilove2dgirl
CODE FESTIVAL 2014 本選 解説
CODE FESTIVAL 2014 本選 解説
AtCoder Inc.
130323 slide all
130323 slide all
ikea0064
WSDM2012読み会: Learning to Rank with Multi-Aspect Relevance for Vertical Search
WSDM2012読み会: Learning to Rank with Multi-Aspect Relevance for Vertical Search
sleepy_yoshi
AtCoder Regular Contest 027 解説
AtCoder Regular Contest 027 解説
AtCoder Inc.
はじめてのパターン認識 第1章
はじめてのパターン認識 第1章
Prunus 1350
Similar to 直交領域探索
(20)
楕円曲線入門トーラスと楕円曲線のつながり
楕円曲線入門トーラスと楕円曲線のつながり
AtCoder Regular Contest 017
AtCoder Regular Contest 017
凸包
凸包
At coder regular contest 013 解説
At coder regular contest 013 解説
「現実世界に活かす数学」 (麻布高等学校、教養総合、数学講義 5 回目)
「現実世界に活かす数学」 (麻布高等学校、教養総合、数学講義 5 回目)
WUPC2012
WUPC2012
暗号技術の実装と数学
暗号技術の実装と数学
CODE THANKS FESTIVAL 2014 A日程 解説
CODE THANKS FESTIVAL 2014 A日程 解説
ニューラル論文を読む前に
ニューラル論文を読む前に
わんくま勉強会東京#82 あおいたんのパズルを数学しましょうか
わんくま勉強会東京#82 あおいたんのパズルを数学しましょうか
AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説
T82 aoitan あおいたんのパズルを数学しましょうか_修正版
T82 aoitan あおいたんのパズルを数学しましょうか_修正版
自然言語処理のための機械学習入門1章
自然言語処理のための機械学習入門1章
CODE FESTIVAL 2015 沖縄ツアー 解説
CODE FESTIVAL 2015 沖縄ツアー 解説
Naivebayes
Naivebayes
CODE FESTIVAL 2014 本選 解説
CODE FESTIVAL 2014 本選 解説
130323 slide all
130323 slide all
WSDM2012読み会: Learning to Rank with Multi-Aspect Relevance for Vertical Search
WSDM2012読み会: Learning to Rank with Multi-Aspect Relevance for Vertical Search
AtCoder Regular Contest 027 解説
AtCoder Regular Contest 027 解説
はじめてのパターン認識 第1章
はじめてのパターン認識 第1章
More from okuraofvegetable
Monadic second-order logic
Monadic second-order logic
okuraofvegetable
パタヘネゼミ 第6章
パタヘネゼミ 第6章
okuraofvegetable
パタヘネゼミ 第2回
パタヘネゼミ 第2回
okuraofvegetable
グレブナー基底
グレブナー基底
okuraofvegetable
NPCA summer 2014
NPCA summer 2014
okuraofvegetable
JOI summer seminar 2014
JOI summer seminar 2014
okuraofvegetable
Lecture2
Lecture2
okuraofvegetable
LT
LT
okuraofvegetable
Wrapping potato chips is fun
Wrapping potato chips is fun
okuraofvegetable
More from okuraofvegetable
(9)
Monadic second-order logic
Monadic second-order logic
パタヘネゼミ 第6章
パタヘネゼミ 第6章
パタヘネゼミ 第2回
パタヘネゼミ 第2回
グレブナー基底
グレブナー基底
NPCA summer 2014
NPCA summer 2014
JOI summer seminar 2014
JOI summer seminar 2014
Lecture2
Lecture2
LT
LT
Wrapping potato chips is fun
Wrapping potato chips is fun
直交領域探索
1.
直交領域探索 okuraofvegetable
2.
まずはじめに • 皆さんよく長方形の内部に含まれ る点を列挙したくなりますよね?
3.
というのは冗談で • 世の中の問題にはしばしばn次元空間における直交領域 のクエリに帰着できるものが存在する • というわけでこれを高速に行いたい
4.
Simple is Best •
𝑑次元平面の𝑁点の中から与えられた直交領域内の点を 列挙したい(𝑑 ≪ 𝑁) • ケースによってはすべての点を列挙することになるので 最悪𝑂(𝑁) • すべての点について領域内か判定すれば𝑂(𝑁) • よって愚直解が最適
5.
Simple is Best •
𝑑次元平面の𝑁点の中から与えられた直交領域内の点を 列挙したい(𝑑 ≪ 𝑁) • ケースによってはすべての点を列挙することになるので 最悪𝑂(𝑁) • すべての点について領域内か判定すれば𝑂(𝑁) • よって愚直解が最適 • 優勝
6.
ご清聴ありがとうございました
7.
というのは冗談で • お分かりのとおり、すべての点の数Nだけでなく領域内 の点の数𝐾で評価すべき • 出力サイズに敏感(𝑂𝑢𝑡𝑝𝑢𝑡
− 𝑠𝑒𝑛𝑠𝑖𝑡𝑖𝑣𝑒)というらしい • これらのクエリにある程度高速に答えられるデータ構造 を紹介します
8.
とりあえず1次元で • これは点の座標を葉に持つような二分探索木を構築すれ ば簡単に答えられる • 二分探索木として平衡二分木を用い、二分木の全頂点で 座標を管理してもできる
9.
こんな感じ 3 19 30
49 59 70 89 100
10.
こんな感じ 49 19 59 3 30
59 89 3 19 30 49 59 70 89 100 3 19 30 49 59 70 89 100
11.
こんな感じ 49 19 59 3 30
59 89 3 19 30 49 59 70 89 100 3 19 30 49 59 70 89 100 葉が各値に対応している
12.
クエリがきたら • クエリに答える際は、𝑠𝑒𝑔𝑚𝑒𝑛𝑡 𝑡𝑟𝑒𝑒の時とほぼ同様にし て答えられる
13.
こんな感じ 49 19 59 3 30
59 89 3 19 30 49 59 70 89 100 クエリ [20,60] 見ている区間 [-∞、∞]
14.
こんな感じ 49 19 59 3 30
59 89 3 19 30 49 59 70 89 100 クエリ [20,60] 見ている区間 [-∞、∞]
15.
こんな感じ 49 19 59 3 30
59 89 3 19 30 49 59 70 89 100 クエリ [20,60] 見ている区間 [-∞、49]
16.
こんな感じ 49 19 59 3 30
59 89 3 19 30 49 59 70 89 100 クエリ [20,60] 見ている区間 [-∞、49]
17.
こんな感じ 49 19 59 3 30
59 89 3 19 30 49 59 70 89 100 クエリ [20,60] 見ている区間 [-∞、19]
18.
こんな感じ 49 19 59 3 30
59 89 3 19 30 49 59 70 89 100 クエリ [20,60] 見ている区間 [-∞、19]←重なりがない→
19.
こんな感じ 49 19 59 3 30
59 89 3 19 30 49 59 70 89 100 クエリ [20,60] 見ている区間 (19,49]完全に含まれている→
20.
こんな感じ 49 19 59 3 30
59 89 3 19 30 49 59 70 89 100 クエリ [20,60] 見ている区間 (19,49]
21.
こんな感じ 49 19 59 3 30
59 89 3 19 30 49 59 70 89 100 クエリ [20,60] 見ている区間 (49,∞]
22.
こんな感じ 49 19 59 3 30
59 89 3 19 30 49 59 70 89 100 クエリ [20,60] 見ている区間 [-∞、49] 残りも同様にして
23.
こんな感じ 49 19 59 3 30
59 89 3 19 30 49 59 70 89 100 クエリ [20,60] 見ている区間 [-∞、49] 残りも同様にして 求まった
24.
計算量 • 構築 に •
空間計算量 𝑂(𝑁) • 時間計算量 𝑂(𝑁𝑙𝑜𝑔𝑁) • クエリ毎に • 𝑂 𝑙𝑜𝑔𝑁 + 𝐾 • (𝐾は答える点の数)
25.
kD-Tree • 2次元以上でも、同様に点を二分探索木で管理してクエ リに答えたい。 • ではどうするか?
26.
kD-Tree • 2次元以上でも、同様に点を二分探索木で管理してクエ リに答えたい。 • ではどうするか? •
奇数回目はx座標で、偶数回目はy座標で、分割する
27.
kD-Tree
28.
kD-Tree 𝑙1
29.
kD-Tree 𝑙1 𝑙2
30.
kD-Tree 𝑙1 𝑙2 𝑙3
31.
kD-Tree 𝑙1 𝑙2 𝑙3 𝑙5 𝑙6 𝑙4 𝑙9 𝑙7 𝑙8
32.
kD-Tree 𝑙1 𝑙2 𝑙3 𝑙4 𝑙5
𝑙7 𝑙8 𝑙6 𝑙9
33.
クエリがきたら • 1次元の場合とほぼ同様にできる。
34.
kD-Treeの計算量 • 2次元の場合 • 構成に •
空間計算量𝑂(𝑁) • 時間計算量𝑂(𝑁𝑙𝑜𝑔𝑁) • クエリ毎に • 𝑂( 𝑁 + 𝐾)
35.
kD-Treeの計算量 • 一般に𝑑次元の場合(𝑑 ≥
2) • 構成に • 空間計算量𝑂(𝑁) • 時間計算量𝑂(𝑁𝑙𝑜𝑔𝑁) • クエリ毎に • 𝑂(𝑁1− 1 𝑑 + 𝐾)
36.
領域木(Range Tree) • まずx座標だけに着目して二分探索木で点を持つ •
今回はkD木の時とは異なり葉だけが点の座標を管理して いるわけではない • そして、各頂点に対応するx座標を持った点達のy座標を 管理する二分探索木を頂点が持っている
37.
こんな感じ
38.
イメージ図
39.
計算量 • x座標を管理する二分探索木を走査するのに𝑂(𝑙𝑜𝑔𝑁) • 走査した各頂点からy座標を管理している二分探索木を 走査するのに𝑂(𝑙𝑜𝑔𝑁) •
あわせて𝑂(𝑙𝑜𝑔2 𝑁 + 𝐾)
40.
計算量 • x座標を管理する二分探索木を走査するのに𝑂(𝑙𝑜𝑔𝑁) • 走査した各頂点からy座標を管理している二分探索木を 走査するのに𝑂(𝑙𝑜𝑔𝑁) •
あわせて𝑂(𝑙𝑜𝑔2 𝑁 + 𝐾) • よさみが深い
41.
計算量 • x座標を管理する二分探索木を走査するのに𝑂(𝑙𝑜𝑔𝑁) • 走査した各頂点からy座標を管理している二分探索木を 走査するのに𝑂(𝑙𝑜𝑔𝑁) •
あわせて𝑂(𝑙𝑜𝑔2 𝑁 + 𝐾) • よさみが深い • が、まだ早くできる
42.
~断片的直列接続法~ フラクショナルカスケーディング
43.
RangeTreeのムダ • 𝑂(𝑙𝑜𝑔𝑁)個の二分探索木に対する探索の範囲はすべて同 じ • うまいことやればいい感じにできそう
44.
Fractional cascading 3 19
30 49 59 70 89 100 ↑点たちをy座標でソート(枠内はy座標の値)
45.
Fractional cascading 3 19
30 49 59 70 89 100 3 49 59 89 19 30 70 100 x座標が中央値以下のものとそれ以外のものに分ける
46.
Fractional cascading 3 19
30 49 59 70 89 100 3 49 59 89 19 30 70 100 残りも同様に 3 59 49 89 19 100 30 70
47.
Fractional cascading 3 19
30 49 59 70 89 100 3 49 59 89 19 30 70 100 3 59 49 89 19 100 30 70 3 59 49 89 19 100 30 70
48.
3 19 30
49 59 70 89 100 3 49 59 89 19 30 70 100 3 59 49 89 19 100 30 70 3 59 49 89 19 100 30 70 x座標の区間に対応する数列たち(例えば図の赤い部分)か ら同じy座標の区間に入る数たちを探す
49.
Fractional cascading 3 19
30 49 59 70 89 100 3 49 59 89 19 30 70 100 3 59 49 89 19 100 30 70 3 59 49 89 19 100 30 70
50.
Fractional cascading • あとは昨日のcatupperさんの講義で言っていたのと同 じ要領で、始めの1つだけ二分探索をしてあとはリンク をたどっていけばよい •
今回は特殊ケースで、元から1つ前の数列の半分が入っ ているので扱う数の範囲に偏りがある心配はない
51.
計算量 • 始めの二分探索に𝑂(𝑙𝑜𝑔𝑁) • リンクをたどるのに𝑂(𝑙𝑜𝑔𝑁) •
あわせて𝑂(𝑙𝑜𝑔𝑁 + 𝐾)
52.
計算量 • 始めの二分探索に𝑂(𝑙𝑜𝑔𝑁) • リンクをたどるのに𝑂(𝑙𝑜𝑔𝑁) •
あわせて𝑂(𝑙𝑜𝑔𝑁 + 𝐾) • ありえんよさみが深い
53.
競プロの問題を解きたい • せっかくやし競プロの問題といてAcceptedの文字が見 たい • AOJのDSLくらいしかない…
54.
使う問題あるよ!
55.
Codeforces Round #118 Div1
E Soap Time! – 2 • 問題概要 • 座標平面上のN点に人がおり、どこか一点に集まりたい。 • 人は1単位時間ごとに上下左右に1進むことができる • 座標平面上のK点に駅があり、これらの任意の2点間は相 互に瞬間移動可能である • 全員が1点に集まるのにかかる時間の最小値を求めよ
56.
ごめんなさい • 今回は時間がたりなかったため通すのを断念しました • また時間があるときに解こうと思います
57.
ご清聴ありがとうございました
Download now