「利用者:Albeit-Kun/最短路検索」の版間の差分

提供: ORWiki
ナビゲーションに移動 検索に移動
(新しいページ: ''''【さいたんろけんさく(shotest path query)】''' == 概要 == 与えられたネットワーク上での2 地点間最短路検索を最短路検索とよぶ...')
 
 
(同じ利用者による、間の11版が非表示)
3行目: 3行目:
 
== 概要 ==
 
== 概要 ==
  
与えられたネットワーク上での2 地点間最短路検索を最短路検索とよぶ.ネットワークデータへの前処理を含む,多くの問い合わせに高速に応答するための,データ構造とアルゴリズムの工夫を紹介する.
+
与えられたネットワーク上での2地点間最短路検索を最短路検索とよぶ.
 +
ネットワークデータへの前処理を含む,多くの問い合わせに高速に応答するための,データ構造とアルゴリズムの工夫を紹介する.
  
 
== 詳説 ==
 
== 詳説 ==
  
 +
=== 最短路検索とは ===
 +
 +
枝重み付きネットワーク上で始点<math>s</math>から終点<math>t\, </math>に至る経路のうち,その枝重み和が最小となる経路を<math>st\, </math>-最短路とよぶ.
 +
(本稿では<math>st\, </math>-最短路長を<math>d(s,t)\, </math>で表す.)
 +
最短路検索は<math>st\, </math>-最短路を高速に検索することを主な目的とする.
 +
その厳密な定義はないがおおむね以下の通りである.
 +
<blockquote>
 +
入力データとして与えられた枝重み付きネットワーク<math>G=(V,E)\, </math>に'''前処理'''を施して,付加データを生成する.
 +
始点<math>s\, </math>,終点<math>t\, </math>の問い合わせに対して入力データと付加データを使って<math>st\, </math>-最短路(あるいは<math>d(s,t)\, </math>)を'''検索'''する.
 +
</blockquote>
 +
ネットワークデータは滅多に変化しないが<math>st\, </math>-最短路の問い合わせは頻繁にあるような,交通におけるナビゲーションなどを主な応用とする.
 +
 +
交通ネットワークなどを応用とする多くの最短路検索においては,入力の枝重みが非負であることが多い.
 +
本稿では枝重みが非負の最短路検索のみを扱う.
 +
 +
最短路検索手法として,最適解を出力するとは限らない,近似的な解を出力する手法も考えられる.
 +
本稿では最適解のみを出力する手法を扱う.
 +
また,計算幾何の手法を用いて連続領域における最短路を検索する手法の研究もあるが,本稿ではネットワークを入力データとする最短路検索のみを扱う.
 +
 +
例えば,前処理を全くせずに,始点・終点の問い合わせに対して'''ダイクストラ(Dijkstra)法'''を実行し最短路を出力するのも最短路検索手法の一つと言える.
 +
本稿で紹介する手法はいずれも,道路ネットワークなどが入力データとして与えられた場合には,検索速度はダイクストラ法に比べて大幅に速くなるが,最悪の場合の計算量は単純にダイクストラ法を実行する手法と変わらない.
 +
 +
=== 代表的な手法の効率の比較 ===
 +
 +
最短路検索手法の性能に関する重要な要素は,検索時の応答の速さ,付加するデータの大きさ,前処理にかかる時間,の3つである.
 +
表1に,次節以降で紹介する代表的な手法のおおまかな比較を示す.
 +
入力データが全米道路ネットワーク(約2300万点,約5800万枝)程度の大きさであることを想定している.
 +
 +
{| border="1" style="text-align:center; margin:0 auto"
 +
|+ 表1: 各最短路検索手法の比較
 +
! 手法 !! 検索 !! 付加データ !! 前処理
 +
|-
 +
! A*+ランドマーク
 +
| 数十倍 || 数百% || 数十秒
 +
|-
 +
! ビットベクトル
 +
| 数百倍 || 数百% || 数日
 +
|-
 +
! ハイウェイ
 +
|  数万倍 || 百数十% || 数十分
 +
|-
 +
! トランジット
 +
|  数十万倍 || 数百% || 数時間
 +
|-
 +
! 階層メッシュ
 +
|  数千倍 || 数% || 数時間
 +
|}
 +
 +
ここで「検索」はダイクストラ法で最短路を計算する場合に比べて何倍速いか,
 +
「付加データ」は高速化のために追加される付加データの大きさは入力データの何%程度か,
 +
「前処理」は前処理にかかる時間が2009年現在の高性能なパソコンでどのくらいか,
 +
を表す.
 +
 +
 +
===A*法===
 +
 +
'''A*(A-star)法'''は各点<math>v \in V\, </math>と終点<math>t\in V\, </math>との最短路長の下界<math>\overline{d(v,t)}\, </math>を用いて,探索点の数を節約する方法である<ref>Doran,J.: An approach to automatic problem-solving, ''Machine Intelligence'', Vol.1 (1967), 105--127.</ref>,<ref>Hart,P.E., Nilsson,N.J. and Raphael,B.: A formal basis for the heuristic determination of minimum cost paths, ''IEEE Transactions on System Science and Cybernetics'', Vol.~4 (1968), 100--107.</ref>.
 +
 +
====A*法のアルゴリズム====
 +
 +
枝<math>(v,w)\in E\, </math>の重みを<math>l(v,w)\, </math>とする.
 +
始点<math>s\, </math>から点<math>v \in V\, </math>への最短距離の暫定値を<math>d(v)\, </math>とする.
 +
 +
  1: <math>d(s):=0,\ d(v):=\infty,\ \forall v\in V\setminus \{s\}\, </math>
 +
  2: <math>S:=V\, </math>
 +
  3: '''while'''<math>S \neq \emptyset\, </math> '''do'''
 +
  4:  <math>d(v)+\overline{d(v,t)}\, </math>が最小の点<math>v\in S\, </math>を選択
 +
  5:  '''if''' <math>v=t\, </math> '''then'''
 +
  6:    '''finish'''
 +
  7:  '''end if''' 
 +
  8:  <math>S:=S\setminus\{v\}\, </math>
 +
  9:  '''for''' '''all''' <math>(v,w)\, </math> '''do'''
 +
10:    '''if''' <math>d(v)+l(v,w)<d(w)\, </math> '''then'''
 +
11:      <math>d(w):=d(v)+l(v,w)\, </math>
 +
12:      <math>S:=S\cup\{w\}\, </math>
 +
13:    '''end if'''
 +
14:  '''end for'''
 +
15: '''end while'''
 +
 +
アルゴリズム終了時の<math>d(t)\, </math>が<math>st\, </math>-最短路の長さである.
 +
 +
ダイクストラ法との違いは4行目と12行目である.
 +
4行目ですべての<math>v\in V\, </math>に関して<math>\overline{d(v,t)}:=0\, </math>とすれば,ダイクストラ法と挙動が同じになる.
 +
A*法とダイクストラ法を比べた場合,A*法の長所は探索点を少なくできること,短所は一度探索した点を再び探索する可能性があることと一探索あたりの計算が(下界を考慮する分)若干複雑であることである.
 +
 +
====ランドマークを用いた下界の強化====
 +
 +
例えば,入力データのネットワークがユークリッド平面上に埋め込まれたもので,枝重みが枝の両端点のユークリッド距離であるとき,点対間のユークリッド距離は点対間の最短路長の下界となる.
 +
この下界をA*法で利用するのはもっとも単純な工夫の一つである.
 +
より強いA*法の下界として,'''ランドマーク(landmark)'''とよばれる点の集合<math>K\subseteq V\, </math>を用いる方法がある<ref>Goldberg,A.V. and Harrelson,C.: Computing the shortest path: A search meets graph theory, in ''Proceedings of the 16th annual ACM-SIAM symposium on Discrete algorithms'', 2005, SIAM</ref>.
 +
一般に枝重み付きネットワーク<math>G=(V,E)\, </math>の3点<math>k,u,v \in V\, </math>に関して,
 +
三角不等式<math>d(u,v) \ge d(k,v)-d(k,u)\, </math>が成り立つ
 +
(これは最短路長に関する三角不等式なので,枝重みに関して三角不等式が成り立たなくても,必ず成り立つ).
 +
ランドマークを用いた工夫では,すべての<math>k\in K\, </math>,すべての<math>v\in V\, </math>に関して<math>d(k,v)\, </math>を前処理で計算し<math>\overline{d(v,t)}:=\max\{d(k,t)-d(k,v)~|~k\in K\}\, </math>とする.
 +
図1にダイクストラ法およびA*法で探索される範囲の例を示す.
 +
最短路は右下(始点)から左上(終点)への太線である.
 +
薄いものから順に,ダイクストラ法で探索される範囲,下界としてユークリッド距離を用いたA*法で探索される範囲,ランドマーク16個を用いたA*法で探索される範囲である.
 +
 +
[[画像:3-way-g.png|thumb|center|500px|図1: ダイクストラ法とA*法の探索範囲]]
 +
 +
ランドマークをまばらに配置すれば,その数は十数個で十分な性能を発揮することが知られている.
 +
このとき付加データの大きさは入力データの数倍程度である.
 +
ランドマークを用いる長所は付加データの生成が,最短路木をランドマークの数だけ作ればよいので,かなり高速であることである.
 +
短所は,ランドマークをいくら増やしても検索時の計算時間はあまり減らないことである.
 +
 +
 +
===ビットベクトル法===
 +
 +
'''ビットベクトル(bit vector)法'''は,最短路を探索する際の探索方向を終点方向に強く限定する手法である.
 +
そのために付加データとして各枝にバイナリベクトルを対応づける<ref>K&ouml;hler,E., M&ouml;hring,R.H. and Schilling,H.: Acceleration of shortest path and constrained shortest path computation, in ''Experimental and Efficient Algorithms'', Vol. 3503 of ''LNCS'', Springer, 2005.</ref>.
 +
前処理では,まず入力ネットワーク<math>G=(V,E)\, </math>の点集合<math>V\, </math>を<math>N\, </math>個の部分集合<math>V_1,\dots,V_N\, </math>に分割する.
 +
(ここで<math>N\, </math>はビットベクトル法を調整するためのパラメータである.)
 +
そしてネットワークの各枝<math>e\in E\, </math>に付随するベクトルの第<math>i\, </math>成分を
 +
「終点が<math>V_i\, </math>に含まれる最短路に<math>e\, </math>が含まれるならば1,そうでないならば0」
 +
に設定する.
 +
検索時には,始点からダイクストラ法で最短路を探索するが,終点が<math>V_j\, </math>に含まれるならば,付随するベクトルの第<math>j\, </math>成分が1である枝のみを探索に用いればよい.
 +
 +
分割<math>V_1,\dots,V_N\, </math>の各部分集合<math>V_i\, </math>が近い場所にまとまっていると枝に付随するベクトルの1成分が少なくなるため効率がよい.
 +
よって一般には(超)平面に埋め込まれた点集合を平面上の矩形分割に対応して分割することが多い.
 +
点集合<math>V\, </math>の分割数が<math>N\, </math>のとき,枝に付随するベクトルはそれぞれ<math>N\, </math>次元ベクトルになる.
 +
よって,例えば32ビットコンピューターであれば<math>N\, </math>は32の倍数が適切である.
 +
<math>N\, </math>が数十でも十分な性能を発揮する.
 +
 +
長所は,パラメータ<math>N\, </math>の設定範囲が広いことである.
 +
<math>N\, </math>が点数に近くなると,各点に関して(終点に向かう)最短路木を保持することに近くなる.
 +
短所は,前処理時間の短縮が難しいことである.
 +
 +
===ハイウェイヒエラルキー法===
 +
 +
'''ハイウェイヒエラルキー(highway hierarchy)法'''は,最短路でよく使われる枝(ハイウェイとよばれる)を階層的に抽出しておいて,検索時にそれを用いる方法である<ref>Sanders,P. and Schultes,D.: Highway hierarchies hasten exact shortest path queries, in ''Proceedings of the 13th European Symposium on Algorithms'', Vol. 3669 of ''LNCS'', Springer, 2005</ref>.
 +
 +
点<math>v\in V\, </math>の近傍<math>N(v)\, </math>を「<math>v\, </math>に最も近い<math>x\, </math>点」と定義する.
 +
(ここで<math>x\, </math>はハイウェイヒエラルキー法を調整するためのパラメータである.)
 +
枝<math>e\in E\, </math>は,それを含む<math>st\, </math>-最短路が存在して<math>N(s)\, </math>にも<math>N(t)\, </math>にも接続しないとき,ハイウェイであると見なされる.
 +
 +
検索時には始点から<math>x\, </math>点までは入力データを,それ以降は付加データであるハイウェイのみを探索に使う.
 +
終点付近でも入力データを使う必要があるため,双方向探索をする必要がある.
 +
 +
また,ハイウェイのみからなるネットワークからさらに上位のハイウェイを同様に抽出することによって階層的なハイウェイを構築し,大幅な効率化を図れる.
 +
近傍の点数は数十程度,ハイウェイの階層は数層で十分な性能を発揮する.
 +
長所は,定義通りに計算すると時間がかかりそうなハイウェイの抽出(前処理)が,アルゴリズムの工夫により高速にできることである.
 +
短所は,双方向探索しかできないことと,それに伴い探索が若干複雑であることである.
 +
 +
 +
===トランジットノード法===
 +
 +
トランジットノード(transit node)法は「遠い地点間を結ぶ最短路の多くは重要な交差点を通る」という経験則に基づいた手法である.
 +
 +
'''トランジットノード'''の集合<math>T\, </math>を「ある程度長い最短路は必ず<math>T\, </math>のいずれかを通るような<math>T\subset V\, </math>」と定義する.
 +
トランジットノードの集合<math>T\, </math>をひとたび定めると,ある程度長い<math>st\, </math>-最短路上にはトランジットノードが複数含まれることがある.
 +
これらのトランジットノードのうち,始点<math>s\, </math>から最初に訪れる可能性があるものの集合を<math>T_\text{out}(s)\, </math>で表す.
 +
同様に終点<math>t\, </math>の直前に訪れる可能性があるものの集合を<math>T_\text{in}(t)\, </math>で表す.
 +
前処理では,各点<math>v\, </math>に対応する<math>T_\text{out}(v),T_\text{in}(v)\, </math>の大きさが平均的に定数程度で抑えられるような,そして<math>T\, </math>の大きさもなるべく小さくなるようなトランジットノードの集合を見つける.
 +
そしてすべての<math>v\in V\, </math>に関して<math>d(v,w), \forall w\in T_\text{out}(v)\, </math>および<math>d(w,v), \forall w\in T_\text{in}(v)\, </math>を計算・記憶し,すべての<math>v,w\in T\, </math>に関して<math>d(v,w)\, </math>を計算・記憶する.
 +
 +
検索時には,与えられた<math>s,t\, </math>に対して,<math>\min\{d(s,v)+d(v,w)+d(w,t)~|~v\in T_\text{out}(s) ,w\in T_\text{in}(t)\}\, </math>を計算すれば<math>st\, </math>-最短路長がわかる.
 +
(ただし<math>s\, </math>と<math>t\, </math>が近い場合にはトランジットノードを利用できない.)
 +
<math>T_\text{out}(v),T_\text{in}(v)\, </math>の大きさが平均的に定数程度に抑えられていれば,検索における計算は非常に短かい時間で終了する.
 +
 +
付加データの大きさはトランジットノードの数に依存し,おおむね
 +
<math>|T|^2+|V|\times(T_\text{out}(v),T_\text{in}(v)</math>の平均<math>)\, </math>程度である.
 +
トランジットノードの集合<math>T\, </math>の大きさは数百から数千で十分な性能を発揮する.
 +
このとき付加データの大きさは入力データの数倍程度になる.
 +
 +
欠点は,
 +
あまり長くない<math>st\, </math>-最短路ではトランジットノードを利用できないことである.
 +
トランジットノードを利用できない場合には,別の手法で<math>st\, </math>-最短路を見つけなければならない.
 +
 +
ハイウェイヒエラルキー法の最上位ハイウェイの点をトランジットノードとする手法が提案されており,良好な結果が報告されている<ref>Bast,H., Funke,S., Sanders,P. and Schultes,D.: Fast Routing in Road Networks with Transit Nodes, ''Science'', Vol. 316 (2007), 566</ref>.
 +
 +
===階層メッシュ疎化法===
 +
 +
階層メッシュ疎化法は,遠い地点間の最短路では絶対に使われない枝を省いた疎なネットワークを前処理で生成し,それを検索時に利用して高速化する手法である<ref>宮本裕一郎, 宇野毅明, 久保幹雄:最短路高速検索のための階層メッシュ疎化法, 情報処理学会研究報告, 第AL-119巻, 2008</ref>.
 +
前処理および検索においてグラフの点の座標を用いることが特徴であり,結果として付加データの軽減に成功している.
 +
付加データの大きさは入力データの数%で十分な性能を発揮する.
 +
以下,グラフは(超)平面に埋め込まれているとする.
 +
 +
前処理では,平面を矩形分割し,各矩形に含まれる枝のうち,その矩形から遠いところ同士を結ぶ最短路で使われない枝を省く.
 +
例えば,2次元平面<math>\mathbb{R}^2\, </math>を一辺の長さ<math>c\, </math>の正方形領域<math>R_{i,j}:=\{(x,y)\in \mathbb{R}^2~|~ic\le x < (i+1)c,~jc\le y < (j+1)c\}\, </math>に分割する.
 +
そして,領域<math>R_{i,j}\, </math>に含まれる枝のうち,領域<math>\{(x,y)\in \mathbb{R}^2~|~(i-1)c\le x < (i+2)c,~(j-1)c\le y < (j+2)c\}\, </math>(これは<math>R_{i,j}\, </math>を中心として9倍の面積を持つ正方形である)の外側に始点・終点をもつ最短路では一度も使われないものを省く.
 +
正方形が大きければ,残された枝は入力データに比べて疎なものとなる.
 +
図2は残った枝を正方形の大きさごとに示した例である.
 +
 +
<gallery caption="図2: 抽出された枝の例" widths="200px" heights="200px" perrow="2">
 +
画像:3-g.png
 +
画像:4-g.png
 +
画像:5-g.png
 +
画像:6-g.png
 +
</gallery>
 +
 +
この例では,正方形の一辺の長さを2の冪乗に限定している.
 +
これにより,大きな正方形で残される枝の計算に,小さな正方形で残された枝のみを利用できるので前処理が効率的に行える.
 +
 +
検索時には,始点・終点に近いところでは小さな正方形に含まれている枝を,遠いところでは大きな正方形に含まれている枝のみを使って最短路探索すればよい.
 +
図3に階層メッシュ疎化法の検索で用いられる疎なネットワークの例を示す.
 +
 +
[[画像:ny-d.png|thumb|center|500px|図3: 疎化ネットワーク上の最短路の例]]
 +
 +
長所は,疎なネットワークを抽出しているだけなので,検索時の探索法の選択に自由度があること,それゆえに実装が簡単であることである.
 +
短所は,グラフを(超)平面に埋め込む必要があること,前処理時間の短縮が難しいことである.
  
 
== 参考文献 ==
 
== 参考文献 ==
 +
 +
<references />

2009年11月17日 (火) 21:35時点における最新版

【さいたんろけんさく(shotest path query)】

概要

与えられたネットワーク上での2地点間最短路検索を最短路検索とよぶ. ネットワークデータへの前処理を含む,多くの問い合わせに高速に応答するための,データ構造とアルゴリズムの工夫を紹介する.

詳説

最短路検索とは

枝重み付きネットワーク上で始点から終点に至る経路のうち,その枝重み和が最小となる経路を-最短路とよぶ. (本稿では-最短路長をで表す.) 最短路検索は-最短路を高速に検索することを主な目的とする. その厳密な定義はないがおおむね以下の通りである.

入力データとして与えられた枝重み付きネットワーク前処理を施して,付加データを生成する. 始点,終点の問い合わせに対して入力データと付加データを使って-最短路(あるいは)を検索する.

ネットワークデータは滅多に変化しないが-最短路の問い合わせは頻繁にあるような,交通におけるナビゲーションなどを主な応用とする.

交通ネットワークなどを応用とする多くの最短路検索においては,入力の枝重みが非負であることが多い. 本稿では枝重みが非負の最短路検索のみを扱う.

最短路検索手法として,最適解を出力するとは限らない,近似的な解を出力する手法も考えられる. 本稿では最適解のみを出力する手法を扱う. また,計算幾何の手法を用いて連続領域における最短路を検索する手法の研究もあるが,本稿ではネットワークを入力データとする最短路検索のみを扱う.

例えば,前処理を全くせずに,始点・終点の問い合わせに対してダイクストラ(Dijkstra)法を実行し最短路を出力するのも最短路検索手法の一つと言える. 本稿で紹介する手法はいずれも,道路ネットワークなどが入力データとして与えられた場合には,検索速度はダイクストラ法に比べて大幅に速くなるが,最悪の場合の計算量は単純にダイクストラ法を実行する手法と変わらない.

代表的な手法の効率の比較

最短路検索手法の性能に関する重要な要素は,検索時の応答の速さ,付加するデータの大きさ,前処理にかかる時間,の3つである. 表1に,次節以降で紹介する代表的な手法のおおまかな比較を示す. 入力データが全米道路ネットワーク(約2300万点,約5800万枝)程度の大きさであることを想定している.

表1: 各最短路検索手法の比較
手法 検索 付加データ 前処理
A*+ランドマーク 数十倍 数百% 数十秒
ビットベクトル 数百倍 数百% 数日
ハイウェイ 数万倍 百数十% 数十分
トランジット 数十万倍 数百% 数時間
階層メッシュ 数千倍 数% 数時間

ここで「検索」はダイクストラ法で最短路を計算する場合に比べて何倍速いか, 「付加データ」は高速化のために追加される付加データの大きさは入力データの何%程度か, 「前処理」は前処理にかかる時間が2009年現在の高性能なパソコンでどのくらいか, を表す.


A*法

A*(A-star)法は各点と終点との最短路長の下界を用いて,探索点の数を節約する方法である[1],[2]

A*法のアルゴリズム

の重みをとする. 始点から点への最短距離の暫定値をとする.

 1: 
 2: 
 3: while do
 4:   が最小の点を選択
 5:   if  then
 6:     finish
 7:   end if  
 8:   
 9:   for all  do
10:     if  then
11:       
12:       
13:     end if
14:   end for
15: end while

アルゴリズム終了時の-最短路の長さである.

ダイクストラ法との違いは4行目と12行目である. 4行目ですべてのに関してとすれば,ダイクストラ法と挙動が同じになる. A*法とダイクストラ法を比べた場合,A*法の長所は探索点を少なくできること,短所は一度探索した点を再び探索する可能性があることと一探索あたりの計算が(下界を考慮する分)若干複雑であることである.

ランドマークを用いた下界の強化

例えば,入力データのネットワークがユークリッド平面上に埋め込まれたもので,枝重みが枝の両端点のユークリッド距離であるとき,点対間のユークリッド距離は点対間の最短路長の下界となる. この下界をA*法で利用するのはもっとも単純な工夫の一つである. より強いA*法の下界として,ランドマーク(landmark)とよばれる点の集合を用いる方法がある[3]. 一般に枝重み付きネットワークの3点に関して, 三角不等式が成り立つ (これは最短路長に関する三角不等式なので,枝重みに関して三角不等式が成り立たなくても,必ず成り立つ). ランドマークを用いた工夫では,すべての,すべてのに関してを前処理で計算しとする. 図1にダイクストラ法およびA*法で探索される範囲の例を示す. 最短路は右下(始点)から左上(終点)への太線である. 薄いものから順に,ダイクストラ法で探索される範囲,下界としてユークリッド距離を用いたA*法で探索される範囲,ランドマーク16個を用いたA*法で探索される範囲である.

図1: ダイクストラ法とA*法の探索範囲

ランドマークをまばらに配置すれば,その数は十数個で十分な性能を発揮することが知られている. このとき付加データの大きさは入力データの数倍程度である. ランドマークを用いる長所は付加データの生成が,最短路木をランドマークの数だけ作ればよいので,かなり高速であることである. 短所は,ランドマークをいくら増やしても検索時の計算時間はあまり減らないことである.


ビットベクトル法

ビットベクトル(bit vector)法は,最短路を探索する際の探索方向を終点方向に強く限定する手法である. そのために付加データとして各枝にバイナリベクトルを対応づける[4]. 前処理では,まず入力ネットワークの点集合個の部分集合に分割する. (ここではビットベクトル法を調整するためのパラメータである.) そしてネットワークの各枝に付随するベクトルの第成分を 「終点がに含まれる最短路にが含まれるならば1,そうでないならば0」 に設定する. 検索時には,始点からダイクストラ法で最短路を探索するが,終点がに含まれるならば,付随するベクトルの第成分が1である枝のみを探索に用いればよい.

分割の各部分集合が近い場所にまとまっていると枝に付随するベクトルの1成分が少なくなるため効率がよい. よって一般には(超)平面に埋め込まれた点集合を平面上の矩形分割に対応して分割することが多い. 点集合の分割数がのとき,枝に付随するベクトルはそれぞれ次元ベクトルになる. よって,例えば32ビットコンピューターであればは32の倍数が適切である. が数十でも十分な性能を発揮する.

長所は,パラメータの設定範囲が広いことである. が点数に近くなると,各点に関して(終点に向かう)最短路木を保持することに近くなる. 短所は,前処理時間の短縮が難しいことである.

ハイウェイヒエラルキー法

ハイウェイヒエラルキー(highway hierarchy)法は,最短路でよく使われる枝(ハイウェイとよばれる)を階層的に抽出しておいて,検索時にそれを用いる方法である[5]

の近傍を「に最も近い点」と定義する. (ここではハイウェイヒエラルキー法を調整するためのパラメータである.) 枝は,それを含む-最短路が存在してにもにも接続しないとき,ハイウェイであると見なされる.

検索時には始点から点までは入力データを,それ以降は付加データであるハイウェイのみを探索に使う. 終点付近でも入力データを使う必要があるため,双方向探索をする必要がある.

また,ハイウェイのみからなるネットワークからさらに上位のハイウェイを同様に抽出することによって階層的なハイウェイを構築し,大幅な効率化を図れる. 近傍の点数は数十程度,ハイウェイの階層は数層で十分な性能を発揮する. 長所は,定義通りに計算すると時間がかかりそうなハイウェイの抽出(前処理)が,アルゴリズムの工夫により高速にできることである. 短所は,双方向探索しかできないことと,それに伴い探索が若干複雑であることである.


トランジットノード法

トランジットノード(transit node)法は「遠い地点間を結ぶ最短路の多くは重要な交差点を通る」という経験則に基づいた手法である.

トランジットノードの集合を「ある程度長い最短路は必ずのいずれかを通るような」と定義する. トランジットノードの集合をひとたび定めると,ある程度長い-最短路上にはトランジットノードが複数含まれることがある. これらのトランジットノードのうち,始点から最初に訪れる可能性があるものの集合をで表す. 同様に終点の直前に訪れる可能性があるものの集合をで表す. 前処理では,各点に対応するの大きさが平均的に定数程度で抑えられるような,そしての大きさもなるべく小さくなるようなトランジットノードの集合を見つける. そしてすべてのに関しておよびを計算・記憶し,すべてのに関してを計算・記憶する.

検索時には,与えられたに対して,を計算すれば-最短路長がわかる. (ただしが近い場合にはトランジットノードを利用できない.) の大きさが平均的に定数程度に抑えられていれば,検索における計算は非常に短かい時間で終了する.

付加データの大きさはトランジットノードの数に依存し,おおむね の平均程度である. トランジットノードの集合の大きさは数百から数千で十分な性能を発揮する. このとき付加データの大きさは入力データの数倍程度になる.

欠点は, あまり長くない-最短路ではトランジットノードを利用できないことである. トランジットノードを利用できない場合には,別の手法で-最短路を見つけなければならない.

ハイウェイヒエラルキー法の最上位ハイウェイの点をトランジットノードとする手法が提案されており,良好な結果が報告されている[6]

階層メッシュ疎化法

階層メッシュ疎化法は,遠い地点間の最短路では絶対に使われない枝を省いた疎なネットワークを前処理で生成し,それを検索時に利用して高速化する手法である[7]. 前処理および検索においてグラフの点の座標を用いることが特徴であり,結果として付加データの軽減に成功している. 付加データの大きさは入力データの数%で十分な性能を発揮する. 以下,グラフは(超)平面に埋め込まれているとする.

前処理では,平面を矩形分割し,各矩形に含まれる枝のうち,その矩形から遠いところ同士を結ぶ最短路で使われない枝を省く. 例えば,2次元平面を一辺の長さの正方形領域に分割する. そして,領域に含まれる枝のうち,領域(これはを中心として9倍の面積を持つ正方形である)の外側に始点・終点をもつ最短路では一度も使われないものを省く. 正方形が大きければ,残された枝は入力データに比べて疎なものとなる. 図2は残った枝を正方形の大きさごとに示した例である.

この例では,正方形の一辺の長さを2の冪乗に限定している. これにより,大きな正方形で残される枝の計算に,小さな正方形で残された枝のみを利用できるので前処理が効率的に行える.

検索時には,始点・終点に近いところでは小さな正方形に含まれている枝を,遠いところでは大きな正方形に含まれている枝のみを使って最短路探索すればよい. 図3に階層メッシュ疎化法の検索で用いられる疎なネットワークの例を示す.

図3: 疎化ネットワーク上の最短路の例

長所は,疎なネットワークを抽出しているだけなので,検索時の探索法の選択に自由度があること,それゆえに実装が簡単であることである. 短所は,グラフを(超)平面に埋め込む必要があること,前処理時間の短縮が難しいことである.

参考文献

  1. Doran,J.: An approach to automatic problem-solving, Machine Intelligence, Vol.1 (1967), 105--127.
  2. Hart,P.E., Nilsson,N.J. and Raphael,B.: A formal basis for the heuristic determination of minimum cost paths, IEEE Transactions on System Science and Cybernetics, Vol.~4 (1968), 100--107.
  3. Goldberg,A.V. and Harrelson,C.: Computing the shortest path: A search meets graph theory, in Proceedings of the 16th annual ACM-SIAM symposium on Discrete algorithms, 2005, SIAM
  4. Köhler,E., Möhring,R.H. and Schilling,H.: Acceleration of shortest path and constrained shortest path computation, in Experimental and Efficient Algorithms, Vol. 3503 of LNCS, Springer, 2005.
  5. Sanders,P. and Schultes,D.: Highway hierarchies hasten exact shortest path queries, in Proceedings of the 13th European Symposium on Algorithms, Vol. 3669 of LNCS, Springer, 2005
  6. Bast,H., Funke,S., Sanders,P. and Schultes,D.: Fast Routing in Road Networks with Transit Nodes, Science, Vol. 316 (2007), 566
  7. 宮本裕一郎, 宇野毅明, 久保幹雄:最短路高速検索のための階層メッシュ疎化法, 情報処理学会研究報告, 第AL-119巻, 2008