SlideShare ist ein Scribd-Unternehmen logo
1 von 32
Downloaden Sie, um offline zu lesen
ドロネー三角形分割
shiatsumat
松下祐介
自己紹介
• Haskell共和国の住人
• 競技プログラミングエンジョイ勢
本の紹介
• 『コンピュータ・ジオメトリ』
• 計算機科学の一分野の計算幾何学の本
• 著者4人のうち3人がMark
今日の予定
• ドロネー三角形分割についてゆるふわに
話します
三角形分割
• 平面上の点の集合Pについて、いくつかの
点の対も辺で結ばれていて、どの辺も交
差していなくて、どの辺で結ばれていな
い2点を辺で結んでも、辺が交差してしま
うような、平面の分割(辺の取り方)を
三角形分割という。
• これが三角形分割です→実演
三角形分割
• どの面も三角形である。
(∵多角形は三角形に分割できる)
• 外側はPの凸包である。
• Pがn点を含み、Pの凸包の境界上にk点が
あるとき、Pのどの三角形分割も、2n-2-k
個の三角形を含み、3n-3-k個の辺を含む。
ドロネー三角形分割
• Pの三角形分割Tにm個の三角形が含まれ
ているとし、Tのそれぞれの三角形の内角
3m個を昇順にソートした列をTの角度ベ
クトルという。
• Pの三角形分割のうち、角度ベクトルが辞
書順で最大であるものをPのドロネー三角
形分割という。
• これがドロネー三角形分割です→実演
ドロネー三角形分割
• TをPの三角形分割とする。TがPのドロ
ネー三角形分割であるための必要十分条
件は、Tの任意の三角形の外接円がその内
部にPの点を含まないことである。
不正な辺
アルゴリズムの概要
• 乱択逐次構成法
• 点をシャッフルし、1つずつ点を増やして
いってそのたびにドロネー三角形分割を
する
• 割と簡単
アルゴリズム
• Pをn点の集合とする
• 三角形分割をするために、最初にPの点を
全て含む大きい三角形を考える
(すごく左上にある点とすごく右上にあ
る点を追加し、Pの一番下にある点と一緒
に三角形を作る)
• 三角形分割Tを大きい三角形として初期化
する。
アルゴリズム
• Pの一番下にある点以外の点をシャッフル
し、列P’を求める。
• P’の点Xを順に追加していく。
• Xを含む三角形分割Tの三角形を△ABCと
する。Tにおいて△ABCを△XBC・
△XCA・△XABに分割する。
• ここで不正な辺が出来ていないか確かめ
る。
アルゴリズム
• 不正な辺になる可能性があるのはBC, CA,
ABの3辺。
• ここではBCが不正であるかを確かめてい
く。他も同様にできる。
アルゴリズム
• △XBCと辺BCで接する三角形を△YCBと
する。
• Yが△XBCの外接円の内部にあれば、BC
は不正。
X
C
B
Y
不正な辺
アルゴリズム
• 不正な辺があった際は、図のように
フリップする。
X
C
B
Y
X
C
B
Y
アルゴリズム
• フリップしたらまた不正な辺ができるか
もしれない。
• YBとYCが不正であるかどうか確かめる。
以下同様に続いていく。
X
C
B
Y
アルゴリズム
• 最終的に全部の点を追加したら、三角形
分割Tから、最初に追加したすごく左上の
点とすごく右上の点に接続している辺を
すべて取り除く。
• これでドロネー三角形分割は完了。
• うれしい。
アルゴリズム
• 「Xを含む三角形分割Tの三角形を△ABC
とする。」ここの計算量はどうだろう
か?
• ナイーブに個々の三角形について点が含
まれているか確かめることもできるが、
O(n)となる
• 三角形分割と同時に木構造を作って再帰
的に求めていくことができる
アルゴリズム
• この乱択逐次構成法の計算量の期待値は
O(n log n)
• うれしい。
ドロネー三角形分割の実用例
• 各地点の高さが分かっているとき、地形の
状況をドロネー三角形分割に基づき表す
ボロノイ図
• 点の集合Pがあり、平面上のすべての座標
について、一番近いPの要素の点を表す図。
ボロノイ図
• 藤原さんが夏季セミナー中に実装しました
ボロノイ図⇔ドロネー三角形分割
• ボロノイ図で領域が接している⇔
ドロネー三角形分割で辺で結ばれている
ボロノイ図の実用例
• 主要都市を元に地域を分割する
ドロネー三角形分割→EMST
• ユークリッド最小木(EMST): 平面上の全
ての点を連結する木の中で辺の長さの総
和が最小なもの
• ドロネー三角形分割をグラフとして見る。
点の数をnとするとドロネー三角形分割の
辺の数は3n-3-kなので、O(n log n)で最
小全域木が求まる。ドロネー三角形分割
と合わせてもO(n log n)となる。
行商人問題 (TSP)
• 言わずと知れたNP困難問題
• n点の間にいくつか距離のある辺があって、
n点全てを1回だけ通る経路のうち総移動
距離が最小のものを求めよ、という問題
• ここではn点は平面上にあり、どの2点間
にも辺があり幾何的な距離を持っている
ものとする
EMST→2近似TSP
• EMSTからTSPの2近似アルゴリズム(総
移動距離が最小の場合の2倍以下)を作る
ことができる
• まずEMSTをなめる閉路をつくる
EMST→2近似TSP
• 閉路をショートカットしていく。
EMST→2近似TSP
• 2回通っている点についてO(1)でショート
カットできるので、O(n)で巡回路になる。
EMSTまでと合わせてO(n log n)となる。
EMST→2近似TSP
• 行商人問題の最適解での総移動距離をtsp、
最小全域木の辺の長さの合計をemst、
ここで求めた巡回路の総移動距離をdとす
る。
tsp≧tspから1本辺を取ったもの≧emst
d≦2emst
∴d≦2tsp
• 以上よりこれは2近似アルゴリズムである。
おまけ
• 暇だったので3Dの凸包を作ってみました
→実演
• このアルゴリズムも乱択逐次構成法
• うれしい
まとめ
• ドロネー三角形分割はうれしい!
ありがとうございました

Weitere ähnliche Inhalte

Was ist angesagt?

【解説】 一般逆行列
【解説】 一般逆行列【解説】 一般逆行列
【解説】 一般逆行列Kenjiro Sugimoto
 
Attentionの基礎からTransformerの入門まで
Attentionの基礎からTransformerの入門までAttentionの基礎からTransformerの入門まで
Attentionの基礎からTransformerの入門までAGIRobots
 
グラフニューラルネットワーク入門
グラフニューラルネットワーク入門グラフニューラルネットワーク入門
グラフニューラルネットワーク入門ryosuke-kojima
 
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないことNorishige Fukushima
 
SSII2020SS: グラフデータでも深層学習 〜 Graph Neural Networks 入門 〜
SSII2020SS: グラフデータでも深層学習 〜 Graph Neural Networks 入門 〜SSII2020SS: グラフデータでも深層学習 〜 Graph Neural Networks 入門 〜
SSII2020SS: グラフデータでも深層学習 〜 Graph Neural Networks 入門 〜SSII
 
深層生成モデルと世界モデル
深層生成モデルと世界モデル深層生成モデルと世界モデル
深層生成モデルと世界モデルMasahiro Suzuki
 
基礎からのベイズ統計学 輪読会資料 第4章 メトロポリス・ヘイスティングス法
基礎からのベイズ統計学 輪読会資料 第4章 メトロポリス・ヘイスティングス法基礎からのベイズ統計学 輪読会資料 第4章 メトロポリス・ヘイスティングス法
基礎からのベイズ統計学 輪読会資料 第4章 メトロポリス・ヘイスティングス法Ken'ichi Matsui
 
最適輸送の解き方
最適輸送の解き方最適輸送の解き方
最適輸送の解き方joisino
 
全力解説!Transformer
全力解説!Transformer全力解説!Transformer
全力解説!TransformerArithmer Inc.
 
PRMLの線形回帰モデル(線形基底関数モデル)
PRMLの線形回帰モデル(線形基底関数モデル)PRMLの線形回帰モデル(線形基底関数モデル)
PRMLの線形回帰モデル(線形基底関数モデル)Yasunori Ozaki
 
勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)
勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)
勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)RyuichiKanoh
 
指数時間アルゴリズム入門
指数時間アルゴリズム入門指数時間アルゴリズム入門
指数時間アルゴリズム入門Yoichi Iwata
 
研究発表のためのプレゼンテーション技術
研究発表のためのプレゼンテーション技術研究発表のためのプレゼンテーション技術
研究発表のためのプレゼンテーション技術Shinnosuke Takamichi
 
モデル高速化百選
モデル高速化百選モデル高速化百選
モデル高速化百選Yusuke Uchida
 
はじめてのパターン認識 第5章 k最近傍法(k_nn法)
はじめてのパターン認識 第5章 k最近傍法(k_nn法)はじめてのパターン認識 第5章 k最近傍法(k_nn法)
はじめてのパターン認識 第5章 k最近傍法(k_nn法)Motoya Wakiyama
 
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造Takuya Akiba
 
基礎線形代数講座
基礎線形代数講座基礎線形代数講座
基礎線形代数講座SEGADevTech
 

Was ist angesagt? (20)

【解説】 一般逆行列
【解説】 一般逆行列【解説】 一般逆行列
【解説】 一般逆行列
 
Attentionの基礎からTransformerの入門まで
Attentionの基礎からTransformerの入門までAttentionの基礎からTransformerの入門まで
Attentionの基礎からTransformerの入門まで
 
グラフニューラルネットワーク入門
グラフニューラルネットワーク入門グラフニューラルネットワーク入門
グラフニューラルネットワーク入門
 
明日使えないすごいビット演算
明日使えないすごいビット演算明日使えないすごいビット演算
明日使えないすごいビット演算
 
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
 
SSII2020SS: グラフデータでも深層学習 〜 Graph Neural Networks 入門 〜
SSII2020SS: グラフデータでも深層学習 〜 Graph Neural Networks 入門 〜SSII2020SS: グラフデータでも深層学習 〜 Graph Neural Networks 入門 〜
SSII2020SS: グラフデータでも深層学習 〜 Graph Neural Networks 入門 〜
 
深層生成モデルと世界モデル
深層生成モデルと世界モデル深層生成モデルと世界モデル
深層生成モデルと世界モデル
 
基礎からのベイズ統計学 輪読会資料 第4章 メトロポリス・ヘイスティングス法
基礎からのベイズ統計学 輪読会資料 第4章 メトロポリス・ヘイスティングス法基礎からのベイズ統計学 輪読会資料 第4章 メトロポリス・ヘイスティングス法
基礎からのベイズ統計学 輪読会資料 第4章 メトロポリス・ヘイスティングス法
 
最適輸送の解き方
最適輸送の解き方最適輸送の解き方
最適輸送の解き方
 
全力解説!Transformer
全力解説!Transformer全力解説!Transformer
全力解説!Transformer
 
PRMLの線形回帰モデル(線形基底関数モデル)
PRMLの線形回帰モデル(線形基底関数モデル)PRMLの線形回帰モデル(線形基底関数モデル)
PRMLの線形回帰モデル(線形基底関数モデル)
 
勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)
勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)
勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)
 
指数時間アルゴリズム入門
指数時間アルゴリズム入門指数時間アルゴリズム入門
指数時間アルゴリズム入門
 
研究発表のためのプレゼンテーション技術
研究発表のためのプレゼンテーション技術研究発表のためのプレゼンテーション技術
研究発表のためのプレゼンテーション技術
 
モデル高速化百選
モデル高速化百選モデル高速化百選
モデル高速化百選
 
はじめてのパターン認識 第5章 k最近傍法(k_nn法)
はじめてのパターン認識 第5章 k最近傍法(k_nn法)はじめてのパターン認識 第5章 k最近傍法(k_nn法)
はじめてのパターン認識 第5章 k最近傍法(k_nn法)
 
動的計画法を極める!
動的計画法を極める!動的計画法を極める!
動的計画法を極める!
 
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
 
基礎線形代数講座
基礎線形代数講座基礎線形代数講座
基礎線形代数講座
 
研究効率化Tips Ver.2
研究効率化Tips Ver.2研究効率化Tips Ver.2
研究効率化Tips Ver.2
 

Andere mochten auch

3次元の凸包を求める
3次元の凸包を求める3次元の凸包を求める
3次元の凸包を求めるabc3141
 
Cc dx lib72-p
Cc dx lib72-pCc dx lib72-p
Cc dx lib72-pCHY72
 
Maxcut - Mesa de Corte
Maxcut - Mesa de CorteMaxcut - Mesa de Corte
Maxcut - Mesa de CorteEmaser
 
DuroMax XP10000E Generator Owners Manual
DuroMax XP10000E Generator Owners ManualDuroMax XP10000E Generator Owners Manual
DuroMax XP10000E Generator Owners ManualDuroMax
 
Salida Hermandad del Rocío (Lucena del Puerto)
Salida Hermandad del Rocío (Lucena del Puerto)Salida Hermandad del Rocío (Lucena del Puerto)
Salida Hermandad del Rocío (Lucena del Puerto)jeromof
 
joi2012-sp-day2-broadcasting
joi2012-sp-day2-broadcastingjoi2012-sp-day2-broadcasting
joi2012-sp-day2-broadcastingMasaki Hara
 
Phys.org mobile social ...revive extinct language
Phys.org mobile  social ...revive extinct languagePhys.org mobile  social ...revive extinct language
Phys.org mobile social ...revive extinct languageLisa Schmidt
 
openFrameworks 動きを生みだす様々なアルゴリズム - 多摩美メディアアートII
openFrameworks 動きを生みだす様々なアルゴリズム - 多摩美メディアアートIIopenFrameworks 動きを生みだす様々なアルゴリズム - 多摩美メディアアートII
openFrameworks 動きを生みだす様々なアルゴリズム - 多摩美メディアアートIIAtsushi Tadokoro
 
AtCoder Beginner Contest 013 解説
AtCoder Beginner Contest 013 解説AtCoder Beginner Contest 013 解説
AtCoder Beginner Contest 013 解説AtCoder Inc.
 
情報抽出入門 〜非構造化データを構造化させる技術〜
情報抽出入門 〜非構造化データを構造化させる技術〜情報抽出入門 〜非構造化データを構造化させる技術〜
情報抽出入門 〜非構造化データを構造化させる技術〜Yuya Unno
 
Unityのポストエフェクトで遊ぶ!
Unityのポストエフェクトで遊ぶ!Unityのポストエフェクトで遊ぶ!
Unityのポストエフェクトで遊ぶ!Yamato Honda
 
Media Art II 2013 第6回:openFrameworks Addonを使う 2 - ofxOpenCV と ofxCv
Media Art II 2013  第6回:openFrameworks Addonを使う 2 - ofxOpenCV と ofxCvMedia Art II 2013  第6回:openFrameworks Addonを使う 2 - ofxOpenCV と ofxCv
Media Art II 2013 第6回:openFrameworks Addonを使う 2 - ofxOpenCV と ofxCvAtsushi Tadokoro
 
エクセルで統計分析 統計プログラムHADについて
エクセルで統計分析 統計プログラムHADについてエクセルで統計分析 統計プログラムHADについて
エクセルで統計分析 統計プログラムHADについてHiroshi Shimizu
 
AtCoder Beginner Contest 023 解説
AtCoder Beginner Contest 023 解説AtCoder Beginner Contest 023 解説
AtCoder Beginner Contest 023 解説AtCoder Inc.
 

Andere mochten auch (20)

3次元の凸包を求める
3次元の凸包を求める3次元の凸包を求める
3次元の凸包を求める
 
Cc dx lib72-p
Cc dx lib72-pCc dx lib72-p
Cc dx lib72-p
 
分割木
分割木分割木
分割木
 
Pleasant Valley Factory Tour
Pleasant Valley Factory TourPleasant Valley Factory Tour
Pleasant Valley Factory Tour
 
Maxcut - Mesa de Corte
Maxcut - Mesa de CorteMaxcut - Mesa de Corte
Maxcut - Mesa de Corte
 
Cammelli AlmaLaurea25agosto2014
Cammelli AlmaLaurea25agosto2014Cammelli AlmaLaurea25agosto2014
Cammelli AlmaLaurea25agosto2014
 
DuroMax XP10000E Generator Owners Manual
DuroMax XP10000E Generator Owners ManualDuroMax XP10000E Generator Owners Manual
DuroMax XP10000E Generator Owners Manual
 
Salida Hermandad del Rocío (Lucena del Puerto)
Salida Hermandad del Rocío (Lucena del Puerto)Salida Hermandad del Rocío (Lucena del Puerto)
Salida Hermandad del Rocío (Lucena del Puerto)
 
全域木いろいろ
全域木いろいろ全域木いろいろ
全域木いろいろ
 
joi2012-sp-day2-broadcasting
joi2012-sp-day2-broadcastingjoi2012-sp-day2-broadcasting
joi2012-sp-day2-broadcasting
 
abc031
abc031abc031
abc031
 
Phys.org mobile social ...revive extinct language
Phys.org mobile  social ...revive extinct languagePhys.org mobile  social ...revive extinct language
Phys.org mobile social ...revive extinct language
 
openFrameworks 動きを生みだす様々なアルゴリズム - 多摩美メディアアートII
openFrameworks 動きを生みだす様々なアルゴリズム - 多摩美メディアアートIIopenFrameworks 動きを生みだす様々なアルゴリズム - 多摩美メディアアートII
openFrameworks 動きを生みだす様々なアルゴリズム - 多摩美メディアアートII
 
AtCoder Beginner Contest 013 解説
AtCoder Beginner Contest 013 解説AtCoder Beginner Contest 013 解説
AtCoder Beginner Contest 013 解説
 
情報抽出入門 〜非構造化データを構造化させる技術〜
情報抽出入門 〜非構造化データを構造化させる技術〜情報抽出入門 〜非構造化データを構造化させる技術〜
情報抽出入門 〜非構造化データを構造化させる技術〜
 
Unityのポストエフェクトで遊ぶ!
Unityのポストエフェクトで遊ぶ!Unityのポストエフェクトで遊ぶ!
Unityのポストエフェクトで遊ぶ!
 
MIRU2014 tutorial deeplearning
MIRU2014 tutorial deeplearningMIRU2014 tutorial deeplearning
MIRU2014 tutorial deeplearning
 
Media Art II 2013 第6回:openFrameworks Addonを使う 2 - ofxOpenCV と ofxCv
Media Art II 2013  第6回:openFrameworks Addonを使う 2 - ofxOpenCV と ofxCvMedia Art II 2013  第6回:openFrameworks Addonを使う 2 - ofxOpenCV と ofxCv
Media Art II 2013 第6回:openFrameworks Addonを使う 2 - ofxOpenCV と ofxCv
 
エクセルで統計分析 統計プログラムHADについて
エクセルで統計分析 統計プログラムHADについてエクセルで統計分析 統計プログラムHADについて
エクセルで統計分析 統計プログラムHADについて
 
AtCoder Beginner Contest 023 解説
AtCoder Beginner Contest 023 解説AtCoder Beginner Contest 023 解説
AtCoder Beginner Contest 023 解説
 

Mehr von Yusuke Matsushita

NPC April Fool's Contest 2014 累乗数
NPC April Fool's Contest 2014 累乗数NPC April Fool's Contest 2014 累乗数
NPC April Fool's Contest 2014 累乗数Yusuke Matsushita
 
関数型プログラミングのすゝめ
関数型プログラミングのすゝめ関数型プログラミングのすゝめ
関数型プログラミングのすゝめYusuke Matsushita
 
型理論 なんて自分には関係ないと思っているあなたへ
型理論 なんて自分には関係ないと思っているあなたへ型理論 なんて自分には関係ないと思っているあなたへ
型理論 なんて自分には関係ないと思っているあなたへYusuke Matsushita
 
Modeling Concurrent Computing
Modeling Concurrent ComputingModeling Concurrent Computing
Modeling Concurrent ComputingYusuke Matsushita
 
Programmers, be a Wikipedian
Programmers, be a WikipedianProgrammers, be a Wikipedian
Programmers, be a WikipedianYusuke Matsushita
 
プログラミング・パラダイム
プログラミング・パラダイムプログラミング・パラダイム
プログラミング・パラダイムYusuke Matsushita
 

Mehr von Yusuke Matsushita (11)

NPC April Fool's Contest 2014 累乗数
NPC April Fool's Contest 2014 累乗数NPC April Fool's Contest 2014 累乗数
NPC April Fool's Contest 2014 累乗数
 
Haskell Lecture 2
Haskell Lecture 2Haskell Lecture 2
Haskell Lecture 2
 
Haskell Lecture 1
Haskell Lecture 1Haskell Lecture 1
Haskell Lecture 1
 
関数型プログラミングのすゝめ
関数型プログラミングのすゝめ関数型プログラミングのすゝめ
関数型プログラミングのすゝめ
 
型理論 なんて自分には関係ないと思っているあなたへ
型理論 なんて自分には関係ないと思っているあなたへ型理論 なんて自分には関係ないと思っているあなたへ
型理論 なんて自分には関係ないと思っているあなたへ
 
C#への招待
C#への招待C#への招待
C#への招待
 
Modeling Concurrent Computing
Modeling Concurrent ComputingModeling Concurrent Computing
Modeling Concurrent Computing
 
Programmers, be a Wikipedian
Programmers, be a WikipedianProgrammers, be a Wikipedian
Programmers, be a Wikipedian
 
OpenMPI入門
OpenMPI入門OpenMPI入門
OpenMPI入門
 
確率解析計算
確率解析計算確率解析計算
確率解析計算
 
プログラミング・パラダイム
プログラミング・パラダイムプログラミング・パラダイム
プログラミング・パラダイム
 

ドロネー三角形分割