SlideShare une entreprise Scribd logo
1  sur  40
凸包
平木 康傑
114514
次元凸包を紹介します!
• テキスト見本
2
2
次元凸包を紹介します!
• テキスト見本
3
3
次元凸包を求めるアルゴリズム
•
2
方法 計算量
愚直 (Naive) 𝑂(𝑁3)
包装法 (Gift wrapping) 𝑂(𝑛 × 辺の数)
Graham Scan / Andrew's Monotone Chain 𝑂(𝑛 log 𝑛)
逐次構成法 (Incremental) 𝑂(𝑛 log 𝑛)
分割統治法 (Divide&Conquer) 𝑂(𝑛 log 𝑛)
4
次元凸包を求めるアルゴリズム
•
3
方法 計算量
愚直 (Naive) 𝑂(𝑁4)
包装法 (Gift wrapping) 𝑂(𝑛 × 面の数)
Graham Scan / Andrew's Monotone Chain -
逐次構成法 (Incremental) 気になる
分割統治法 (Divide&Conquer) 気になる
5
逐次構築法 (Incremental)
• 10 分に収まらないので省略します
• あとでアップロードしとくので
6
逐次構築法 (Incremental)
• まず同一平面上にない 4 点をとってくる
• とれなかったら全点が同一平面上なので実質 2 次元凸包
• 残りの点をランダムな順に付け加えていく(つまり乱択)
•
7
逐次構築法 (Incremental)
• 凸包 𝐶 に点 𝑣 を付け加えて新たな凸包 𝐶′ にすることを考える
• 𝑣 が 𝐶 の内部にあったら何もしなくてよい.以下,𝑣 は 𝐶 の外部とする
• 𝑣 の位置から 𝐶 を見たとき,見える面と見えない面に分けられる
•
•
8
逐次構築法 (Incremental)
• 凸包 𝐶 に点 𝑣 を付け加えて新たな凸包 𝐶′ にすることを考える
• 𝑣 が 𝐶 の内部にあったら何もしなくてよい.以下,𝑣 は 𝐶 の外部とする
• 𝑣 の位置から 𝐶 を見たとき,見える面と見えない面に分けられる
• 𝐶 の辺から成る,可視領域を囲む閉曲線のことを 地平面(horizon) と呼ぶ
• 見える面を全て消し,地平面の各点と 𝑣 を結ぶ
9
逐次構築法 (Incremental)
• 愚直に書くと 𝑂 𝑁2
• 工夫すると平均計算量が落ちる
10
逐次構築法 (Incremental)
• 「いまある面」と「これから追加する点」をそれぞれ頂点として
左右においた2部グラフを考える
• お互いに見える面と点の間に辺を張る
• この2部グラフを 衝突グラフ(conflict graph) と呼ぶ
• これは,辺で結ばれた面と点に関して,
最終的な凸包に両方とも含まれることが無いことからいう
11
逐次構築法 (Incremental)
• 衝突グラフの初期化は簡単 (4つの面に対して愚直にやる)
• 点 𝑣 を追加するときの更新を考えよう
• まず,追加した点 𝑣 と消した面を衝突グラフから消し去る
• 追加した面を衝突グラフに加え,各面について,その面が見える点との
間に辺を張る
• これ以外の面に変化はない
• 下線部の操作をどうするか?
12
追加した面が見える点を列挙する
• 面 𝑓 を追加したとする
• 既にある面と同一平面上にあって統合される場合は,
見える点のリストが変化することはないので無視できる
• 統合されない場合,その面が接している地平線の 1 辺 𝑒 に注目する
13
追加した面が見える点を列挙する
• その面が接している地平線の 1 辺 𝑒 に注目する
• 𝑓 が見える点からは,少なくとも辺 𝑒 が見えるはず
• ここで,
• 面 𝑓 を追加する直前にも辺 𝑒 はあった
• 辺 𝑒 が見える条件 = その辺を持つ 2 つの面の少なくとも片方が見える
• ということから,辺 𝑒 を持っていた 2 つの面の衝突リストの点だけ
調べればよいとわかる
14
計算量
• この工夫によって,平均計算量が 𝑂(𝑁 log 𝑁) に落ちる
• ただし最悪計算量は 𝑂(𝑁3
)
• 証明は難しいし時間もかかるので省略
15
方法 計算量
愚直 (Naive) 𝑂(𝑁4)
包装法 (Gift wrapping) 𝑂(𝑛 × 面の数)
Graham Scan / Andrew's Monotone Chain -
逐次構成法 (Incremental) 平均𝑂(𝑁 log 𝑁)
分割統治法 (Divide&Conquer) 気になる
分割統治法 (Divide&Conquer)
• みなさんご存じ分割統治法
• 2 次元でも 3 次元でも使えます
16
17
話の流れ
• merge の仕方
• merge の計算量
• ちょっとした工夫
• 辺の数を抑える
分割統治法 (Divide&Conquer)
• 𝑁 ≤ 7 のときは分けてもしょうがないので愚直にやる
• 𝑁 ≥ 8 のとき,𝑥 座標の小さい方と大きい方で半々で分割し,
再帰的に作ってからそれを merge する
18
How to merge?
• 𝐿 と 𝑅 の間に辺をつける
• それらの辺によって面ができるが,
それに包まれて不要になった点を消し去る
19
How to merge? (もっと詳しく)
• 凸包の 1 辺を見つける(一応簡単にできる)
• そこからギフト包装法の要領で,AB->CB->CD->ED->FD->FG->…->AB と
辺を追加する(ここがキモ)
• 消さない点と消す点は地平面できれいに二分されるので,
不要になった点の消去は簡単にできる
20
包装のしかた
• 直前に追加した辺を 𝑎 − 𝑏 とする
• 明らかに,点 𝑎 か点 𝑏 と隣接している点のうちから選ぶのがよい
• 直感的には「角度」の最も大きな点を選ぶのがよい
• 適切に「角度」を設定することで実際にそのようにできる
21
包装のしかた
• 直前に追加した辺を 𝑎 − 𝑏 とする
• 明らかに,点 𝑎 か点 𝑏 と隣接している点のうちから選ぶのがよい
• 直感的には「角度」の最も大きな点を選ぶのがよい
• 適切に「角度」を設定することで実際にそのようにできる
• 愚直に全て試すと 𝑂(𝑁2
) だが,
工夫によって落ちる
22
23
包装の工夫
• 𝐿 側の点 𝑣 𝐿 と結ばれた場合,愚直だと 𝑅 側の点をもう 1 周
調べることになるが,これは無駄そう
• 前の辺からはじめて反時計回りに見ていき,
「角度」が最大になった時点でその辺を選ぶ
• ここで飛ばした辺は,以後凸包の内部に含まれてしまう
• したがって,すべての辺は高々定数回しか
調べる必要が無い
24
マージの計算量
• よって merge の計算量は 𝑂(𝑉 + 𝐸)
•
25
Steinitz の定理
• ところで,以下が成り立ちます
• ある単純で連結な無向グラフが,凸多面体のスケルトングラフたりえる
必要十分条件は,「3 連結な平面的グラフ」であること
•
26
Steinitz の定理
• ところで,以下が成り立ちます
• ある単純で連結な無向グラフが,凸多面体のスケルトングラフたりえる
必要十分条件は,「3 連結な平面的グラフ」であること
• したがって,凸包のグラフは平面的です
• (Wikipedia に証明が書いてます)
27
Steinitz の定理
• ところで,以下が成り立ちます
• ある単純で連結な無向グラフが,凸多面体のスケルトングラフたりえる
必要十分条件は,「3 連結な平面的グラフ」であること
• したがって,凸包のグラフは平面的です
• 余談ですが,グラフが 3 連結かも平面的かも DFS と同じ計算量で判定できる
• つまり 𝑂(𝑉 + 𝐸)
• 3 連結かの判定: 下とは別の,Hopcroft と Tarjan の論文
• 平面的かの判定: Hopcroft-Tarjan のアルゴリズム
28
Euler の定理
• ついでに,以下が成り立ちます
• 平面的グラフを交差しないよう平面に埋め込んだとき,
(頂点数) − 辺の数 + 面の数 = 2
が成り立つ
• 証明は昨年のスライドを参照
29
つまり
• 凸多面体について,
(頂点数) − 辺の数 + 面の数 = 2
が成り立つ
• まあわざわざ先の 2 つを組み合わせなくても
Euler の多面体定理で一発なんですけどね,初見さん
30
つまり
• 凸多面体について,
(頂点数) − 辺の数 + 面の数 = 2
が成り立つ
• 全ての面は 3 角形であるとしてよい
• 厳密に凸ではなくなるが,多角形を分割しても上の式に影響はない
• このとき 面の数 =
2
3
(辺の数)
• 上の 2 式から 辺の数 = 3 頂点数 − 6 = 𝑂(頂点数) がわかる
31
マージの計算量
• さっき merge の計算量は 𝑂 𝑉 + 𝐸 と言ったが,𝐸 = 𝑂(𝑉) なので
結局 𝑂(𝑉) となり,実家のような安心感を得る
32
実装?
• ここで紹介した分割統治法は,3 次元凸包を 𝑂(𝑁 log 𝑁) で求める最初の手法
• Preparata と Hong によって 1977 年に提案された
• お察しの通り実装が重い
• 2003 年になってより実装量の少ない(100 行ほど)手法が現れた
• 提案者 Timothy M. Chan の論文の末尾に実際の実装がなされている 超短い
• A Minimalist’s Implementation of the 3-d Divide-and-Conquer Convex Hull Algorithm
33
より高次元の凸包?
• 2, 3 次元の凸包は(出力に依存しないとき) 𝑂(𝑁 log 𝑁) で最適
← 2 次元の東方
次元が増えても
𝑂(𝑁 log 𝑁) 時間で
できないかな?
34
より高次元の凸包?
• 2, 3 次元の凸包は(出力に依存しないとき) 𝑂(𝑁 log 𝑁) で最適
• できない
次元が増えても
𝑂(𝑁 log 𝑁) 時間で
できないかな?
35
より高次元の凸包
• 𝑑 次元 (𝑑 ≤ 4) の凸包を求めるアルゴリズムの計算量は
Θ 𝑉
𝑑
2
が最適とわかっている
36
より高次元の凸包
• 𝑑 次元 (𝑑 ≤ 4) の凸包を求めるアルゴリズムの計算量は
Θ 𝑉
𝑑
2
が最適とわかっている
• (Voronoi 図についてもなんかあった気がする)
37
まとめ
• 分割統治はあなたの後ろにいます
38
参考文献
• 4人ぐらい, “Computational Geometry: Algorithms and Applications 第2版”, 2008
• 杉原厚吉, “計算幾何工学”, 1994
• F. P. Preparata & S. J. Hong, “Convex Hulls of Finite Sets of Points in Two and Three
Dimensions”, 1977
39
参考文献
• J. E. Hopcroft & R. E. Tarjan, “Dividing a Graph into Triconnected Components”, 1973
• 同上, “Efficient planarity testing”, 1974
• Timothy M. Chan, “A Minimalist’s Implementation of the 3-d Divide-and-Conquer
Convex Hull Algorithm”, 2003
• Bernard Chazelle, “An Optimal Convex Hull Algorithm in Any Fixed Dimension”, 1993
40
画像出典
• いらすとや
• p.2 車,p.9,11 ずんだもち,p.11 ビーム,p.25-27 パイナップル,p25-27 ペン,p-28 ペン
• Wikipedia
• p.16 とんかつ
• square1001 の AtCoder プロフィール
• p.28 二つのりんご
• dairi さん
• p.33 チルノ

Contenu connexe

Tendances

競技プログラミングでの線型方程式系
競技プログラミングでの線型方程式系競技プログラミングでの線型方程式系
競技プログラミングでの線型方程式系tmaehara
 
AtCoder Beginner Contest 023 解説
AtCoder Beginner Contest 023 解説AtCoder Beginner Contest 023 解説
AtCoder Beginner Contest 023 解説AtCoder Inc.
 
Union find(素集合データ構造)
Union find(素集合データ構造)Union find(素集合データ構造)
Union find(素集合データ構造)AtCoder Inc.
 
AtCoder Beginner Contest 022 解説
AtCoder Beginner Contest 022 解説AtCoder Beginner Contest 022 解説
AtCoder Beginner Contest 022 解説AtCoder Inc.
 
AtCoder Regular Contest 044 解説
AtCoder Regular Contest 044 解説AtCoder Regular Contest 044 解説
AtCoder Regular Contest 044 解説AtCoder Inc.
 
CODE FESTIVAL 2014 本選 解説
CODE FESTIVAL 2014 本選 解説CODE FESTIVAL 2014 本選 解説
CODE FESTIVAL 2014 本選 解説AtCoder Inc.
 
AtCoder Beginner Contest 017 解説
AtCoder Beginner Contest 017 解説AtCoder Beginner Contest 017 解説
AtCoder Beginner Contest 017 解説AtCoder Inc.
 
色々なダイクストラ高速化
色々なダイクストラ高速化色々なダイクストラ高速化
色々なダイクストラ高速化yosupo
 
AtCoder Regular Contest 002
AtCoder Regular Contest 002AtCoder Regular Contest 002
AtCoder Regular Contest 002AtCoder Inc.
 
AtCoder Beginner Contest 008 解説
AtCoder Beginner Contest 008 解説AtCoder Beginner Contest 008 解説
AtCoder Beginner Contest 008 解説AtCoder Inc.
 
Indeedなう 予選B 解説
Indeedなう 予選B 解説Indeedなう 予選B 解説
Indeedなう 予選B 解説AtCoder Inc.
 
AtCoder Regular Contest 033 解説
AtCoder Regular Contest 033 解説AtCoder Regular Contest 033 解説
AtCoder Regular Contest 033 解説AtCoder Inc.
 
AtCoder Regular Contest 025 解説
AtCoder Regular Contest 025 解説AtCoder Regular Contest 025 解説
AtCoder Regular Contest 025 解説AtCoder Inc.
 
Amortize analysis of Deque with 2 Stack
Amortize analysis of Deque with 2 StackAmortize analysis of Deque with 2 Stack
Amortize analysis of Deque with 2 StackKen Ogura
 
Code Formula 2014 予選A 解説
Code Formula 2014 予選A 解説Code Formula 2014 予選A 解説
Code Formula 2014 予選A 解説AtCoder Inc.
 

Tendances (20)

競技プログラミングでの線型方程式系
競技プログラミングでの線型方程式系競技プログラミングでの線型方程式系
競技プログラミングでの線型方程式系
 
AtCoder Beginner Contest 023 解説
AtCoder Beginner Contest 023 解説AtCoder Beginner Contest 023 解説
AtCoder Beginner Contest 023 解説
 
Union find(素集合データ構造)
Union find(素集合データ構造)Union find(素集合データ構造)
Union find(素集合データ構造)
 
AtCoder Beginner Contest 022 解説
AtCoder Beginner Contest 022 解説AtCoder Beginner Contest 022 解説
AtCoder Beginner Contest 022 解説
 
AtCoder Regular Contest 044 解説
AtCoder Regular Contest 044 解説AtCoder Regular Contest 044 解説
AtCoder Regular Contest 044 解説
 
直交領域探索
直交領域探索直交領域探索
直交領域探索
 
RMQ クエリ処理
RMQ クエリ処理RMQ クエリ処理
RMQ クエリ処理
 
CODE FESTIVAL 2014 本選 解説
CODE FESTIVAL 2014 本選 解説CODE FESTIVAL 2014 本選 解説
CODE FESTIVAL 2014 本選 解説
 
AtCoder Beginner Contest 017 解説
AtCoder Beginner Contest 017 解説AtCoder Beginner Contest 017 解説
AtCoder Beginner Contest 017 解説
 
色々なダイクストラ高速化
色々なダイクストラ高速化色々なダイクストラ高速化
色々なダイクストラ高速化
 
AtCoder Regular Contest 002
AtCoder Regular Contest 002AtCoder Regular Contest 002
AtCoder Regular Contest 002
 
AtCoder Beginner Contest 008 解説
AtCoder Beginner Contest 008 解説AtCoder Beginner Contest 008 解説
AtCoder Beginner Contest 008 解説
 
Indeedなう 予選B 解説
Indeedなう 予選B 解説Indeedなう 予選B 解説
Indeedなう 予選B 解説
 
AtCoder Regular Contest 033 解説
AtCoder Regular Contest 033 解説AtCoder Regular Contest 033 解説
AtCoder Regular Contest 033 解説
 
AtCoder Regular Contest 025 解説
AtCoder Regular Contest 025 解説AtCoder Regular Contest 025 解説
AtCoder Regular Contest 025 解説
 
ABC001 解説
ABC001 解説ABC001 解説
ABC001 解説
 
二分探索をはじめからていねいに
二分探索をはじめからていねいに二分探索をはじめからていねいに
二分探索をはじめからていねいに
 
abc032
abc032abc032
abc032
 
Amortize analysis of Deque with 2 Stack
Amortize analysis of Deque with 2 StackAmortize analysis of Deque with 2 Stack
Amortize analysis of Deque with 2 Stack
 
Code Formula 2014 予選A 解説
Code Formula 2014 予選A 解説Code Formula 2014 予選A 解説
Code Formula 2014 予選A 解説
 

Similaire à 凸包

プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造Takuya Akiba
 
キャッシュコヒーレントに囚われない並列カウンタ達
キャッシュコヒーレントに囚われない並列カウンタ達キャッシュコヒーレントに囚われない並列カウンタ達
キャッシュコヒーレントに囚われない並列カウンタ達Kumazaki Hiroki
 
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズムプログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズムTakuya Akiba
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学MITSUNARI Shigeo
 
楕円曲線入門 トーラスと楕円曲線のつながり
楕円曲線入門トーラスと楕円曲線のつながり楕円曲線入門トーラスと楕円曲線のつながり
楕円曲線入門 トーラスと楕円曲線のつながりMITSUNARI Shigeo
 
わんくま勉強会東京#82 あおいたんのパズルを数学しましょうか
わんくま勉強会東京#82 あおいたんのパズルを数学しましょうかわんくま勉強会東京#82 あおいたんのパズルを数学しましょうか
わんくま勉強会東京#82 あおいたんのパズルを数学しましょうかMasami Yabushita
 
T82 aoitan あおいたんのパズルを数学しましょうか_修正版
T82 aoitan あおいたんのパズルを数学しましょうか_修正版T82 aoitan あおいたんのパズルを数学しましょうか_修正版
T82 aoitan あおいたんのパズルを数学しましょうか_修正版Masami Yabushita
 
暗号文のままで計算しよう - 準同型暗号入門 -
暗号文のままで計算しよう - 準同型暗号入門 -暗号文のままで計算しよう - 準同型暗号入門 -
暗号文のままで計算しよう - 準同型暗号入門 -MITSUNARI Shigeo
 
区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)
区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)
区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)Kensuke Otsuki
 
20190725 taguchi decision_tree_for_pubshare
20190725 taguchi decision_tree_for_pubshare20190725 taguchi decision_tree_for_pubshare
20190725 taguchi decision_tree_for_pubsharetaguchi naoya
 
RBM、Deep Learningと学習(全脳アーキテクチャ若手の会 第3回DL勉強会発表資料)
RBM、Deep Learningと学習(全脳アーキテクチャ若手の会 第3回DL勉強会発表資料)RBM、Deep Learningと学習(全脳アーキテクチャ若手の会 第3回DL勉強会発表資料)
RBM、Deep Learningと学習(全脳アーキテクチャ若手の会 第3回DL勉強会発表資料)Takuma Yagi
 
コミュニティ分類アルゴリズムの高速化とソーシャルグラフへの応用
コミュニティ分類アルゴリズムの高速化とソーシャルグラフへの応用コミュニティ分類アルゴリズムの高速化とソーシャルグラフへの応用
コミュニティ分類アルゴリズムの高速化とソーシャルグラフへの応用mosa siru
 
Learning Deep Architectures for AI (第 3 回 Deep Learning 勉強会資料; 松尾)
Learning Deep Architectures for AI (第 3 回 Deep Learning 勉強会資料; 松尾)Learning Deep Architectures for AI (第 3 回 Deep Learning 勉強会資料; 松尾)
Learning Deep Architectures for AI (第 3 回 Deep Learning 勉強会資料; 松尾)Ohsawa Goodfellow
 
平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズム平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズムTakuya Akiba
 

Similaire à 凸包 (14)

プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
 
キャッシュコヒーレントに囚われない並列カウンタ達
キャッシュコヒーレントに囚われない並列カウンタ達キャッシュコヒーレントに囚われない並列カウンタ達
キャッシュコヒーレントに囚われない並列カウンタ達
 
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズムプログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズム
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学
 
楕円曲線入門 トーラスと楕円曲線のつながり
楕円曲線入門トーラスと楕円曲線のつながり楕円曲線入門トーラスと楕円曲線のつながり
楕円曲線入門 トーラスと楕円曲線のつながり
 
わんくま勉強会東京#82 あおいたんのパズルを数学しましょうか
わんくま勉強会東京#82 あおいたんのパズルを数学しましょうかわんくま勉強会東京#82 あおいたんのパズルを数学しましょうか
わんくま勉強会東京#82 あおいたんのパズルを数学しましょうか
 
T82 aoitan あおいたんのパズルを数学しましょうか_修正版
T82 aoitan あおいたんのパズルを数学しましょうか_修正版T82 aoitan あおいたんのパズルを数学しましょうか_修正版
T82 aoitan あおいたんのパズルを数学しましょうか_修正版
 
暗号文のままで計算しよう - 準同型暗号入門 -
暗号文のままで計算しよう - 準同型暗号入門 -暗号文のままで計算しよう - 準同型暗号入門 -
暗号文のままで計算しよう - 準同型暗号入門 -
 
区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)
区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)
区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)
 
20190725 taguchi decision_tree_for_pubshare
20190725 taguchi decision_tree_for_pubshare20190725 taguchi decision_tree_for_pubshare
20190725 taguchi decision_tree_for_pubshare
 
RBM、Deep Learningと学習(全脳アーキテクチャ若手の会 第3回DL勉強会発表資料)
RBM、Deep Learningと学習(全脳アーキテクチャ若手の会 第3回DL勉強会発表資料)RBM、Deep Learningと学習(全脳アーキテクチャ若手の会 第3回DL勉強会発表資料)
RBM、Deep Learningと学習(全脳アーキテクチャ若手の会 第3回DL勉強会発表資料)
 
コミュニティ分類アルゴリズムの高速化とソーシャルグラフへの応用
コミュニティ分類アルゴリズムの高速化とソーシャルグラフへの応用コミュニティ分類アルゴリズムの高速化とソーシャルグラフへの応用
コミュニティ分類アルゴリズムの高速化とソーシャルグラフへの応用
 
Learning Deep Architectures for AI (第 3 回 Deep Learning 勉強会資料; 松尾)
Learning Deep Architectures for AI (第 3 回 Deep Learning 勉強会資料; 松尾)Learning Deep Architectures for AI (第 3 回 Deep Learning 勉強会資料; 松尾)
Learning Deep Architectures for AI (第 3 回 Deep Learning 勉強会資料; 松尾)
 
平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズム平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズム
 

凸包