<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>https://orsj-ml.org/orwiki/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Albeit-Kun</id>
	<title>ORWiki - 利用者の投稿記録 [ja]</title>
	<link rel="self" type="application/atom+xml" href="https://orsj-ml.org/orwiki/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Albeit-Kun"/>
	<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E7%89%B9%E5%88%A5:%E6%8A%95%E7%A8%BF%E8%A8%98%E9%8C%B2/Albeit-Kun"/>
	<updated>2026-04-08T12:38:37Z</updated>
	<subtitle>利用者の投稿記録</subtitle>
	<generator>MediaWiki 1.35.3</generator>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85:Albeit-Kun/%E6%9C%80%E7%9F%AD%E8%B7%AF%E6%A4%9C%E7%B4%A2&amp;diff=11222</id>
		<title>利用者:Albeit-Kun/最短路検索</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85:Albeit-Kun/%E6%9C%80%E7%9F%AD%E8%B7%AF%E6%A4%9C%E7%B4%A2&amp;diff=11222"/>
		<updated>2009-11-17T12:35:36Z</updated>

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

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

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

		<summary type="html">&lt;p&gt;Albeit-Kun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Albeit-Kun</name></author>
	</entry>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:6-g.png&amp;diff=11218</id>
		<title>ファイル:6-g.png</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:6-g.png&amp;diff=11218"/>
		<updated>2009-11-17T12:30:36Z</updated>

		<summary type="html">&lt;p&gt;Albeit-Kun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Albeit-Kun</name></author>
	</entry>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85:Albeit-Kun/%E6%9C%80%E7%9F%AD%E8%B7%AF%E6%A4%9C%E7%B4%A2&amp;diff=11217</id>
		<title>利用者:Albeit-Kun/最短路検索</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85:Albeit-Kun/%E6%9C%80%E7%9F%AD%E8%B7%AF%E6%A4%9C%E7%B4%A2&amp;diff=11217"/>
		<updated>2009-11-17T12:29:33Z</updated>

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

		<summary type="html">&lt;p&gt;Albeit-Kun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Albeit-Kun</name></author>
	</entry>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Ny-d.png&amp;diff=11215</id>
		<title>ファイル:Ny-d.png</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Ny-d.png&amp;diff=11215"/>
		<updated>2009-11-17T12:26:54Z</updated>

		<summary type="html">&lt;p&gt;Albeit-Kun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Albeit-Kun</name></author>
	</entry>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:3-way-g.png&amp;diff=11214</id>
		<title>ファイル:3-way-g.png</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:3-way-g.png&amp;diff=11214"/>
		<updated>2009-11-17T12:25:21Z</updated>

		<summary type="html">&lt;p&gt;Albeit-Kun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Albeit-Kun</name></author>
	</entry>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:3-g.png&amp;diff=11213</id>
		<title>ファイル:3-g.png</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:3-g.png&amp;diff=11213"/>
		<updated>2009-11-17T12:23:37Z</updated>

		<summary type="html">&lt;p&gt;Albeit-Kun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Albeit-Kun</name></author>
	</entry>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85:Albeit-Kun/%E6%9C%80%E7%9F%AD%E8%B7%AF%E6%A4%9C%E7%B4%A2&amp;diff=11212</id>
		<title>利用者:Albeit-Kun/最短路検索</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85:Albeit-Kun/%E6%9C%80%E7%9F%AD%E8%B7%AF%E6%A4%9C%E7%B4%A2&amp;diff=11212"/>
		<updated>2009-11-17T10:42:41Z</updated>

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

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

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

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

		<summary type="html">&lt;p&gt;Albeit-Kun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''【さいたんろけんさく（shotest path query）】'''&lt;br /&gt;
&lt;br /&gt;
==概要==&lt;br /&gt;
&lt;br /&gt;
与えられたネットワーク上での2 地点間最短路検索を最短路検索とよぶ．ネットワークデータへの前処理を含む，多くの問い合わせに高速に応答するための，データ構造とアルゴリズムの工夫を紹介する．&lt;br /&gt;
&lt;br /&gt;
== 詳説 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 最短路検索とは ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 参考文献 ==&lt;/div&gt;</summary>
		<author><name>Albeit-Kun</name></author>
	</entry>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85:Albeit-Kun/%E6%9C%80%E7%9F%AD%E8%B7%AF%E6%A4%9C%E7%B4%A2&amp;diff=11207</id>
		<title>利用者:Albeit-Kun/最短路検索</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85:Albeit-Kun/%E6%9C%80%E7%9F%AD%E8%B7%AF%E6%A4%9C%E7%B4%A2&amp;diff=11207"/>
		<updated>2009-11-07T06:33:32Z</updated>

		<summary type="html">&lt;p&gt;Albeit-Kun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''【さいたんろけんさく（shotest path query）】'''&lt;br /&gt;
&lt;br /&gt;
== 概要 ==&lt;br /&gt;
&lt;br /&gt;
与えられたネットワーク上での2 地点間最短路検索を最短路検索とよぶ．ネットワークデータへの前処理を含む，多くの問い合わせに高速に応答するための，データ構造とアルゴリズムの工夫を紹介する．&lt;br /&gt;
&lt;br /&gt;
== 詳説 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 最短路検索とは ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 参考文献 ==&lt;/div&gt;</summary>
		<author><name>Albeit-Kun</name></author>
	</entry>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85:Albeit-Kun/%E6%9C%80%E7%9F%AD%E8%B7%AF%E6%A4%9C%E7%B4%A2&amp;diff=11206</id>
		<title>利用者:Albeit-Kun/最短路検索</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85:Albeit-Kun/%E6%9C%80%E7%9F%AD%E8%B7%AF%E6%A4%9C%E7%B4%A2&amp;diff=11206"/>
		<updated>2009-11-07T06:25:01Z</updated>

		<summary type="html">&lt;p&gt;Albeit-Kun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''【さいたんろけんさく（shotest path query）】'''&lt;br /&gt;
&lt;br /&gt;
== 概要 ==&lt;br /&gt;
&lt;br /&gt;
与えられたネットワーク上での2 地点間最短路検索を最短路検索とよぶ．ネットワークデータへの前処理を含む，多くの問い合わせに高速に応答するための，データ構造とアルゴリズムの工夫を紹介する．&lt;br /&gt;
&lt;br /&gt;
== 詳説 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 参考文献 ==&lt;/div&gt;</summary>
		<author><name>Albeit-Kun</name></author>
	</entry>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85:Albeit-Kun/%E6%9C%80%E7%9F%AD%E8%B7%AF%E6%A4%9C%E7%B4%A2&amp;diff=11205</id>
		<title>利用者:Albeit-Kun/最短路検索</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85:Albeit-Kun/%E6%9C%80%E7%9F%AD%E8%B7%AF%E6%A4%9C%E7%B4%A2&amp;diff=11205"/>
		<updated>2009-11-07T06:24:21Z</updated>

		<summary type="html">&lt;p&gt;Albeit-Kun: ページの白紙化&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Albeit-Kun</name></author>
	</entry>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85:Albeit-Kun/%E6%9C%80%E7%9F%AD%E8%B7%AF%E6%A4%9C%E7%B4%A2&amp;diff=11204</id>
		<title>利用者:Albeit-Kun/最短路検索</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85:Albeit-Kun/%E6%9C%80%E7%9F%AD%E8%B7%AF%E6%A4%9C%E7%B4%A2&amp;diff=11204"/>
		<updated>2009-11-07T06:23:42Z</updated>

		<summary type="html">&lt;p&gt;Albeit-Kun: 新しいページ: ''''【さいたんろけんさく（shotest path query）】'''  == 概要 ==  与えられたネットワーク上での2 地点間最短路検索を最短路検索とよぶ...'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''【さいたんろけんさく（shotest path query）】'''&lt;br /&gt;
&lt;br /&gt;
== 概要 ==&lt;br /&gt;
&lt;br /&gt;
与えられたネットワーク上での2 地点間最短路検索を最短路検索とよぶ．ネットワークデータへの前処理を含む，多くの問い合わせに高速に応答するための，データ構造とアルゴリズムの工夫を紹介する．&lt;br /&gt;
&lt;br /&gt;
== 詳説 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 参考文献 ==&lt;/div&gt;</summary>
		<author><name>Albeit-Kun</name></author>
	</entry>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85:Albeit-Kun&amp;diff=11203</id>
		<title>利用者:Albeit-Kun</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85:Albeit-Kun&amp;diff=11203"/>
		<updated>2009-11-07T06:23:29Z</updated>

		<summary type="html">&lt;p&gt;Albeit-Kun: ページの白紙化&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Albeit-Kun</name></author>
	</entry>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85:Albeit-Kun&amp;diff=11202</id>
		<title>利用者:Albeit-Kun</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85:Albeit-Kun&amp;diff=11202"/>
		<updated>2009-11-06T02:17:13Z</updated>

		<summary type="html">&lt;p&gt;Albeit-Kun: 新しいページ: ''''【さいたんろけんさく（shotest path query）】'''  == 概要 ==  与えられたネットワーク上での2 地点間最短路検索を最短路検索とよぶ...'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''【さいたんろけんさく（shotest path query）】'''&lt;br /&gt;
&lt;br /&gt;
== 概要 ==&lt;br /&gt;
&lt;br /&gt;
与えられたネットワーク上での2 地点間最短路検索を最短路検索とよぶ．ネットワークデータへの前処理を含む，多くの問い合わせに高速に応答するための，データ構造とアルゴリズムの工夫を紹介する．&lt;br /&gt;
&lt;br /&gt;
== 詳説 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 参考文献 ==&lt;/div&gt;</summary>
		<author><name>Albeit-Kun</name></author>
	</entry>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E5%89%B2%E5%BC%95%E3%81%8D&amp;diff=11183</id>
		<title>割引き</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E5%89%B2%E5%BC%95%E3%81%8D&amp;diff=11183"/>
		<updated>2008-11-14T00:55:57Z</updated>

		<summary type="html">&lt;p&gt;Albeit-Kun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''【わりびき (discount)】'''&lt;br /&gt;
&lt;br /&gt;
将来に発生する費用, 利得, 効用などを現在価値に評価する際に用いる操作. 例えば, 離散時間では割引き因子を &amp;lt;math&amp;gt;\beta \in [0, 1)\,&amp;lt;/math&amp;gt; として, &amp;lt;math&amp;gt;n\,&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;= 0, 1, 2, \cdots\,&amp;lt;/math&amp;gt;) 期後に発生する費用 &amp;lt;math&amp;gt;c\,&amp;lt;/math&amp;gt;  を現在価値 &amp;lt;math&amp;gt;\beta^{n} c\,&amp;lt;/math&amp;gt; と評価する. 単に &amp;lt;math&amp;gt;\beta = 1/ (1 + \,&amp;lt;/math&amp;gt;[無リスク利子率]&amp;lt;math&amp;gt; ) \, &amp;lt;/math&amp;gt; とすることも多いが, 抽象的に, 意思決定者の時間選好, 異時点間の代替性のパラメータとみなすことも少なくない. 動的最適化を行う際の評価規範として, 割引きのある評価規範を用いることが多い.&lt;br /&gt;
&lt;br /&gt;
[[category:確率と確率過程|わりびき]]&lt;/div&gt;</summary>
		<author><name>Albeit-Kun</name></author>
	</entry>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E5%89%B2%E5%BD%93%E5%95%8F%E9%A1%8C&amp;diff=11182</id>
		<title>割当問題</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E5%89%B2%E5%BD%93%E5%95%8F%E9%A1%8C&amp;diff=11182"/>
		<updated>2008-11-14T00:55:28Z</updated>

		<summary type="html">&lt;p&gt;Albeit-Kun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''【わりあてもんだい (assignment problem)】'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;|V^+| = |V^-|\,&amp;lt;/math&amp;gt; なる2部グラフ  &amp;lt;math&amp;gt;G = (V^+, V^-; A)\,&amp;lt;/math&amp;gt; および各枝 &amp;lt;math&amp;gt;a \in A\,&amp;lt;/math&amp;gt; の重み &amp;lt;math&amp;gt;w(a) \in {\mathbf R}\,&amp;lt;/math&amp;gt;が与えられたときに, 枝の重みの和 &amp;lt;math&amp;gt;\textstyle \sum_{a \in M}w(a)\,&amp;lt;/math&amp;gt; を最大にする完全マッチング &amp;lt;math&amp;gt;M \subseteq A\,&amp;lt;/math&amp;gt; を求める問題を割り当て問題と呼ぶ.   最大重み完全マッチング問題とも呼ばれるこの問題は, 最小費用フロー問題（最小費用流問題）の特殊ケースと見ることもできる. この問題に対し, 効率的な多項式時間解法が数多く提案されている.&lt;br /&gt;
&lt;br /&gt;
[[Category:グラフ･ネットワーク|わりあてもんだい]]&lt;/div&gt;</summary>
		<author><name>Albeit-Kun</name></author>
	</entry>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E5%89%B2%E5%BD%93%E3%81%A6%E5%B8%82%E5%A0%B4%E3%82%B2%E3%83%BC%E3%83%A0&amp;diff=11181</id>
		<title>割当て市場ゲーム</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E5%89%B2%E5%BD%93%E3%81%A6%E5%B8%82%E5%A0%B4%E3%82%B2%E3%83%BC%E3%83%A0&amp;diff=11181"/>
		<updated>2008-11-14T00:55:02Z</updated>

		<summary type="html">&lt;p&gt;Albeit-Kun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''【わりあてしじょうげーむ (assignment game)】'''&lt;br /&gt;
&lt;br /&gt;
プレイヤーが売り手と買い手の2つの集合に分割され, 売り手が初期財として1つの非分割財を保有し, 買い手は1つの財のみ欲するような市場ゲーム. 各提携の特性関数の値は,その提携における割当て問題の最適解で与えられる. 割当て市場ゲームのコアは, 全員提携の割当て問題に相当する線形計画問題の双対問題の解で与えられる.&lt;br /&gt;
&lt;br /&gt;
[[category:ゲーム理論|わりあてしじょうげーむ]]&lt;/div&gt;</summary>
		<author><name>Albeit-Kun</name></author>
	</entry>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%83%AF%E3%82%B0%E3%83%8A%E3%83%BC%E3%83%BB%E3%82%A6%E3%82%A3%E3%83%83%E3%83%86%E3%82%A3%E3%83%B3%E3%83%A2%E3%83%87%E3%83%AB&amp;diff=11180</id>
		<title>ワグナー・ウィッティンモデル</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%83%AF%E3%82%B0%E3%83%8A%E3%83%BC%E3%83%BB%E3%82%A6%E3%82%A3%E3%83%83%E3%83%86%E3%82%A3%E3%83%B3%E3%83%A2%E3%83%87%E3%83%AB&amp;diff=11180"/>
		<updated>2008-11-14T00:54:38Z</updated>

		<summary type="html">&lt;p&gt;Albeit-Kun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''【わぐなーうぃってぃんもでる (Wagner-Whitin model)】'''&lt;br /&gt;
&lt;br /&gt;
動的ロットサイズ決定問題のこと.&lt;br /&gt;
在庫管理のモデルの一種で, 各期の需要は確定的に既知であるが必ずしも一定でない場合を考える. すなわち, 計画期間&amp;lt;math&amp;gt;T\,&amp;lt;/math&amp;gt;中の各期&amp;lt;math&amp;gt;t\,&amp;lt;/math&amp;gt;の需要を&amp;lt;math&amp;gt;d_{t}\,&amp;lt;/math&amp;gt;, 製品1個あたりの発注費用を&amp;lt;math&amp;gt;c_{t}\,&amp;lt;/math&amp;gt;, 発注量に無関係に必要な発注費用を&amp;lt;math&amp;gt;K_{t}\,&amp;lt;/math&amp;gt;, 製品1個の1期間あたりの在庫維持費用&amp;lt;math&amp;gt;h_{t}\,&amp;lt;/math&amp;gt;が所与のとき, 計画期間の開始時の在庫が0として, 総費用を最小化するような各期の発注量を求める問題.&lt;br /&gt;
&lt;br /&gt;
詳しくは[[《動的ロットサイズ決定問題》|基礎編：動的ロットサイズ決定問題]]を参照.&lt;br /&gt;
&lt;br /&gt;
[[category:生産・在庫・ロジスティクス|わぐなーうぃってぃんもでる]]&lt;/div&gt;</summary>
		<author><name>Albeit-Kun</name></author>
	</entry>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E8%AB%96%E7%90%86%E6%8E%A8%E8%AB%96&amp;diff=11179</id>
		<title>論理推論</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E8%AB%96%E7%90%86%E6%8E%A8%E8%AB%96&amp;diff=11179"/>
		<updated>2008-11-14T00:53:52Z</updated>

		<summary type="html">&lt;p&gt;Albeit-Kun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''【ろんりすいろん (logical inference)】'''&lt;br /&gt;
&lt;br /&gt;
記号論理を用いた推論のこと. 公理と推論規則, およびそれらから導出される(つまり証明される)定理のみによって推論が行われる. 各記号論理体系ごとに推論規則が存在するが, 例えば一階述語論理ではモーダスポーネンス(2つの任意の論理式とこれら論理式間の関係が与えられたとき, ある論理式から他方を導く推論規則)が唯一の推論規則である.&lt;br /&gt;
&lt;br /&gt;
[[category:近似・知能・感覚的手法|ろんりすいろん]]&lt;/div&gt;</summary>
		<author><name>Albeit-Kun</name></author>
	</entry>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%83%AD%E3%83%9C%E3%83%86%E3%82%A3%E3%83%83%E3%82%AF%E3%82%BB%E3%83%AB%E3%82%B9%E3%82%B1%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AA%E3%83%B3%E3%82%B0&amp;diff=11178</id>
		<title>ロボティックセルスケジューリング</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%83%AD%E3%83%9C%E3%83%86%E3%82%A3%E3%83%83%E3%82%AF%E3%82%BB%E3%83%AB%E3%82%B9%E3%82%B1%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AA%E3%83%B3%E3%82%B0&amp;diff=11178"/>
		<updated>2008-11-14T00:53:28Z</updated>

		<summary type="html">&lt;p&gt;Albeit-Kun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''【ろぼてぃっくせるすけじゅーりんぐ (robotic cell scheduling)】'''&lt;br /&gt;
&lt;br /&gt;
数台のマシニングセンタと機械間のジョブ搬送を行う1台のロボットからなる小規模のFMSをロボティックセル(またはFMS)という. ロボティックセルにおいては機械間の仕掛け用バッファを置かない場合が多いので, 処理順序とともにロボットによるジョブ搬送経路も最適化することが求められる.&lt;br /&gt;
&lt;br /&gt;
[[Category:スケジューリング|ろぼてぃっくせるすけじゅーりんぐ]]&lt;/div&gt;</summary>
		<author><name>Albeit-Kun</name></author>
	</entry>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%83%AD%E3%83%90%E3%83%BC%E3%82%B9%E6%95%B0&amp;diff=11177</id>
		<title>ロバース数</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%83%AD%E3%83%90%E3%83%BC%E3%82%B9%E6%95%B0&amp;diff=11177"/>
		<updated>2008-11-14T00:52:47Z</updated>

		<summary type="html">&lt;p&gt;Albeit-Kun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''【ろばーすすう (Lov&amp;amp;aacute;sz number)】'''&lt;br /&gt;
&lt;br /&gt;
与えられた無向グラフ&amp;lt;math&amp;gt;G\,&amp;lt;/math&amp;gt;に対して定義される数値 (&amp;lt;math&amp;gt;\vartheta (G)\,&amp;lt;/math&amp;gt;と書かれる事が多い)で, グラフのクリーク数および彩色数と重要な関連をもつ. &amp;lt;math&amp;gt;G\,&amp;lt;/math&amp;gt;のクリーク数&amp;lt;math&amp;gt;w(G)\,&amp;lt;/math&amp;gt;と彩色数&amp;lt;math&amp;gt;\chi (G)\,&amp;lt;/math&amp;gt;に対し, &amp;lt;math&amp;gt;w(G) \leq \vartheta (\overline{G}) \leq  \chi (G)\,&amp;lt;/math&amp;gt; が成り立つ事が知られている, ただし &amp;lt;math&amp;gt;\overline{G}\,&amp;lt;/math&amp;gt; は&amp;lt;math&amp;gt;G\,&amp;lt;/math&amp;gt;の補グラフである.&amp;lt;math&amp;gt;w(G), \chi (G)\,&amp;lt;/math&amp;gt; を求めるのはNP困難であるのに対し, &amp;lt;math&amp;gt;\vartheta (\overline{G})\,&amp;lt;/math&amp;gt;は多項式時間で求めることができる. 頂点に重みのついたグラフにも, 自然な形で定義を拡張することができる.&lt;br /&gt;
&lt;br /&gt;
[[Category:組合せ最適化|ろばーすすう]]&lt;/div&gt;</summary>
		<author><name>Albeit-Kun</name></author>
	</entry>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%83%AD%E3%82%B8%E3%83%83%E3%83%88%E3%83%A2%E3%83%87%E3%83%AB&amp;diff=11176</id>
		<title>ロジットモデル</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%83%AD%E3%82%B8%E3%83%83%E3%83%88%E3%83%A2%E3%83%87%E3%83%AB&amp;diff=11176"/>
		<updated>2008-11-14T00:51:29Z</updated>

		<summary type="html">&lt;p&gt;Albeit-Kun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''【ろじっともでる (logit model)】'''&lt;br /&gt;
&lt;br /&gt;
非集計行動モデルの中でもっとも広く利用されているモデル. 式の意味が理解しやすく, パラメータの推定も比較的に容易であり, 操作性に優れている. 効用関数の誤差項の確率分布としてガンベル分布を想定しており, 次の一般式が求められる. &amp;lt;math&amp;gt;\textstyle P_{in}={\mbox{exp}}(V_{in}) / \sum_{j=1}^{J_n}{\mbox{exp}}(V_{jn})\,&amp;lt;/math&amp;gt;. ここで, &amp;lt;math&amp;gt;P_{in}\,&amp;lt;/math&amp;gt;: 個人 &amp;lt;math&amp;gt;n\,&amp;lt;/math&amp;gt; の選択肢 &amp;lt;math&amp;gt;i\,&amp;lt;/math&amp;gt; の選択確率, &amp;lt;math&amp;gt;V_{in}\,&amp;lt;/math&amp;gt;: 個人 &amp;lt;math&amp;gt;n\,&amp;lt;/math&amp;gt; の選択肢 &amp;lt;math&amp;gt;i\,&amp;lt;/math&amp;gt; の効用確定項, &amp;lt;math&amp;gt;J_n\,&amp;lt;/math&amp;gt;: 個人 &amp;lt;math&amp;gt;n\,&amp;lt;/math&amp;gt; の選択肢数.&lt;br /&gt;
&lt;br /&gt;
[[category:予測|ろじっともでる]]&lt;/div&gt;</summary>
		<author><name>Albeit-Kun</name></author>
	</entry>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%83%AD%E3%82%B8%E3%82%B9%E3%83%86%E3%82%A3%E3%83%83%E3%82%AF%E3%83%A2%E3%83%87%E3%83%AB&amp;diff=11175</id>
		<title>ロジスティックモデル</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%83%AD%E3%82%B8%E3%82%B9%E3%83%86%E3%82%A3%E3%83%83%E3%82%AF%E3%83%A2%E3%83%87%E3%83%AB&amp;diff=11175"/>
		<updated>2008-11-14T00:50:54Z</updated>

		<summary type="html">&lt;p&gt;Albeit-Kun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''【ろじすてぃっくもでる (logistic model)】'''&lt;br /&gt;
&lt;br /&gt;
ロジスティックモデルは, 生態学モデルの中で最も単純な1種の個体群の時間変化を記述したモデルである. &amp;lt;math&amp;gt;N\,&amp;lt;/math&amp;gt;を時刻&amp;lt;math&amp;gt;t\,&amp;lt;/math&amp;gt;における個体数として, &amp;lt;math&amp;gt;N=k/(1+m \mbox {e}^{-\lambda t})\,&amp;lt;/math&amp;gt;と表現する. ここで, &amp;lt;math&amp;gt;k\,&amp;lt;/math&amp;gt;は飽和個体数であり, &amp;lt;math&amp;gt;\lambda\,&amp;lt;/math&amp;gt;は定数である. ロジスティックモデルは, 生態学にとどまらず, 人口の増加過程, 新製品の普及過程など様々な社会的現象, ソフトウェア信頼度成長モデルなどの工学にも適用されている.&lt;br /&gt;
&lt;br /&gt;
[[category:予測|ろじすてぃっくもでる]]&lt;/div&gt;</summary>
		<author><name>Albeit-Kun</name></author>
	</entry>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E5%8A%B4%E5%83%8D%E6%9D%A1%E4%BB%B6&amp;diff=11174</id>
		<title>労働条件</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E5%8A%B4%E5%83%8D%E6%9D%A1%E4%BB%B6&amp;diff=11174"/>
		<updated>2008-11-14T00:49:58Z</updated>

		<summary type="html">&lt;p&gt;Albeit-Kun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''【ろうどうじょうけん (working condition)】'''&lt;br /&gt;
&lt;br /&gt;
労働者の労働条件は, 労働基本法を始めとする労働関係法規により規定されている事項, 労使間で合意した就業規則, すでに慣行となっている事項に基づいて決めるもので, 職務内容, 労働時間, 賃金, 休日・休暇などが要素として含まれる. より良い労働条件を確立することで, 労働者の働く意欲を高め, ひいては組織の存続・成長につなげることができる.&lt;br /&gt;
&lt;br /&gt;
[[category:企画・開発・プロジェクト・品質・ヒューマン|ろうどうじょうけん]]&lt;/div&gt;</summary>
		<author><name>Albeit-Kun</name></author>
	</entry>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E9%80%A3%E7%B6%9A%E6%99%82%E9%96%93%E3%83%AD%E3%83%83%E3%83%88%E3%82%B9%E3%82%B1%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AA%E3%83%B3%E3%82%B0&amp;diff=11173</id>
		<title>連続時間ロットスケジューリング</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E9%80%A3%E7%B6%9A%E6%99%82%E9%96%93%E3%83%AD%E3%83%83%E3%83%88%E3%82%B9%E3%82%B1%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AA%E3%83%B3%E3%82%B0&amp;diff=11173"/>
		<updated>2008-11-14T00:49:33Z</updated>

		<summary type="html">&lt;p&gt;Albeit-Kun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''【れんぞくじかんろっとすけじゅーりんぐ (continuous time lot scheduling)】'''&lt;br /&gt;
&lt;br /&gt;
各品種が一定の需要速度をもつとき, それら品種の製造連を連続時間軸上に割り付ける問題である. 生産速度が有限だと品種間に生産時期の干渉が起こり, 在庫量の時間変化が複雑となる. このため, 基本サイクリックスケジューリング方式を除いて, 問題は一般にNP困難である.&lt;br /&gt;
&lt;br /&gt;
[[category:生産・在庫・ロジスティクス|れんぞくじかんろっとすけじゅーりんぐ]]&lt;/div&gt;</summary>
		<author><name>Albeit-Kun</name></author>
	</entry>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E9%80%A3%E7%B6%9A%E6%9C%80%E9%81%A9%E5%8C%96%E5%95%8F%E9%A1%8C&amp;diff=11172</id>
		<title>連続最適化問題</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E9%80%A3%E7%B6%9A%E6%9C%80%E9%81%A9%E5%8C%96%E5%95%8F%E9%A1%8C&amp;diff=11172"/>
		<updated>2008-11-14T00:49:11Z</updated>

		<summary type="html">&lt;p&gt;Albeit-Kun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''【れんぞくさいてきかもんだい (continuous optimization problem)】'''&lt;br /&gt;
&lt;br /&gt;
最適化問題(数理計画問題)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table align=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\mbox{max.}  \,&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;f(x) ( \,&amp;lt;/math&amp;gt;あるいは, &amp;lt;math&amp;gt;\mbox{min.} \; f(x) ) \, &amp;lt;/math&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\mbox{s.t.}  \,&amp;lt;/math&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;x = (x_1,x_2,\ldots,x_n) \in F, \,&amp;lt;/math&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
において,  実行可能集合 &amp;lt;math&amp;gt;F\,&amp;lt;/math&amp;gt; が連続関数 &amp;lt;math&amp;gt;g_i\,&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;(i=1,2,\ldots,m)\,&amp;lt;/math&amp;gt; と開集合 &amp;lt;math&amp;gt;S\,&amp;lt;/math&amp;gt; を用いて,&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;F = \{ x \in S : g_i(x) \leq 0 \ (i=1,2,\ldots,m) \} \, &amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
の様に表現され, 変数ベクトル &amp;lt;math&amp;gt;x\,&amp;lt;/math&amp;gt; が実数値をとる問題.&lt;br /&gt;
&lt;br /&gt;
[[Category:線形計画|れんぞくさいてきかもんだい]]&lt;/div&gt;</summary>
		<author><name>Albeit-Kun</name></author>
	</entry>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E9%80%A3%E7%B6%9A%E5%9E%8B%E5%88%86%E5%B8%83&amp;diff=11171</id>
		<title>連続型分布</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E9%80%A3%E7%B6%9A%E5%9E%8B%E5%88%86%E5%B8%83&amp;diff=11171"/>
		<updated>2008-11-14T00:48:44Z</updated>

		<summary type="html">&lt;p&gt;Albeit-Kun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''【れんぞくがたぶんぷ (continuous distribution)】'''&lt;br /&gt;
&lt;br /&gt;
累積分布関数が連続な分布. &lt;br /&gt;
累積分布関数が微分可能な場合には, その導関数を確率密度関数，あるいは単に密度関数，と呼ぶ. 確率密度関数をもつ分布のことを絶対連続型分布, あるいは単に連続型分布と呼ぶこともある. &lt;br /&gt;
連続型分布の代表的な例として, 正規分布, 指数分布, ガンマ分布, ベータ分布, &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;-分布, コーシー分布などがある.&lt;br /&gt;
&lt;br /&gt;
[[category:確率と確率過程|れんぞくがたぶんぷ]]&lt;/div&gt;</summary>
		<author><name>Albeit-Kun</name></author>
	</entry>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E9%80%A3%E7%B6%9A%E5%9E%8B%E3%82%B7%E3%83%9F%E3%83%A5%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E8%A8%80%E8%AA%9E&amp;diff=11170</id>
		<title>連続型シミュレーション言語</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E9%80%A3%E7%B6%9A%E5%9E%8B%E3%82%B7%E3%83%9F%E3%83%A5%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E8%A8%80%E8%AA%9E&amp;diff=11170"/>
		<updated>2008-11-14T00:48:21Z</updated>

		<summary type="html">&lt;p&gt;Albeit-Kun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''【れんぞくがたしみゅれーしょんげんご (continuous simulation language)】'''&lt;br /&gt;
&lt;br /&gt;
微分方程式で記述されるモデルのシミュレーション専用の[[シミュレーションソフトウェア|コンピュータ言語]]のこと. CSSLやACSLが代表例としてあげられる.ルンゲ・クッタ(Runge-Kutta)法で微分方程式の初期値問題を解く機能が提供される. 連続型シミュレーションにおける時間の進め方は, 時間の刻み幅を定める単位時間(量子時間)制御方式であり, 短期的には等間隔で時間が進められる.刻み幅はユーザーの指定する精度に応じてアルゴリズムによって自動的に調整される.&lt;br /&gt;
&lt;br /&gt;
[[category:シミュレーション|れんぞくがたしみゅれーしょんげんご]]&lt;/div&gt;</summary>
		<author><name>Albeit-Kun</name></author>
	</entry>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E9%80%A3%E7%B6%9A%E5%9E%8B%E3%82%B7%E3%83%9F%E3%83%A5%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3&amp;diff=11169</id>
		<title>連続型シミュレーション</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E9%80%A3%E7%B6%9A%E5%9E%8B%E3%82%B7%E3%83%9F%E3%83%A5%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3&amp;diff=11169"/>
		<updated>2008-11-14T00:47:58Z</updated>

		<summary type="html">&lt;p&gt;Albeit-Kun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''【れんぞくがたしみゅれーしょん (continuous simulation)】'''&lt;br /&gt;
&lt;br /&gt;
微分方程式系で規定されるシステムの[[シミュレーション]]のこと.ルンゲ・クッタ(Runge-Kutta)法等で微分方程式の初期値問題を解くことに相当する. 連続型シミュレーションは一連の静止画像を見て, あたかも連続的な動きをしているかのように感じる映画の原理と同じで,微小な時間の刻み幅を定め, 刻み幅にしたがってシステムの状態を更新することによってシミュレーションを進める.物理現象等, 理工学分野の応用例が多い.&lt;br /&gt;
&lt;br /&gt;
[[category:シミュレーション|れんぞくがたしみゅれーしょん]]&lt;/div&gt;</summary>
		<author><name>Albeit-Kun</name></author>
	</entry>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E9%80%A3%E7%B5%90%E5%BA%A6%E5%A2%97%E5%A4%A7%E5%95%8F%E9%A1%8C&amp;diff=11168</id>
		<title>連結度増大問題</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E9%80%A3%E7%B5%90%E5%BA%A6%E5%A2%97%E5%A4%A7%E5%95%8F%E9%A1%8C&amp;diff=11168"/>
		<updated>2008-11-14T00:47:35Z</updated>

		<summary type="html">&lt;p&gt;Albeit-Kun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''【れんけつどぞうだいもんだい (connectivity augmentation problem)】'''&lt;br /&gt;
&lt;br /&gt;
与えられた無向(有向)グラフの辺連結度, あるいは点連結度を指定された目標値まで大きくするためにグラフに最小費用の辺の集合を付加する問題である. この問題は一般にはNP困難であるが, 付加辺の本数を最小にする場合には, 以下の問題に対して多項式時間の解法が知られている. %無向グラフの各点対間の局所辺連結度をそれぞれの目標値まで上げる問題, 無向(有向)グラフの辺連結度を目標値まで上げる問題, 無向グラフの点連結度を4以下の目標値に上げる問題, 有向グラフの点連結度を1だけ上げる問題.&lt;br /&gt;
&lt;br /&gt;
[[Category:グラフ･ネットワーク|れんけつどぞうだいもんだい]]&lt;/div&gt;</summary>
		<author><name>Albeit-Kun</name></author>
	</entry>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E9%80%A3%E7%B5%90%E5%BA%A6_(%E3%82%B0%E3%83%A9%E3%83%95%E3%81%AE)&amp;diff=11167</id>
		<title>連結度 (グラフの)</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E9%80%A3%E7%B5%90%E5%BA%A6_(%E3%82%B0%E3%83%A9%E3%83%95%E3%81%AE)&amp;diff=11167"/>
		<updated>2008-11-14T00:47:11Z</updated>

		<summary type="html">&lt;p&gt;Albeit-Kun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''【れんけつど (connectivity of graph)】'''&lt;br /&gt;
&lt;br /&gt;
=== 概要 ===&lt;br /&gt;
無向(有向)グラフ&amp;lt;math&amp;gt;G\,&amp;lt;/math&amp;gt;の辺の部分集合は, それを除去するとグラフが連結(強連結)でなくなるとき, 辺カットという. &amp;lt;math&amp;gt;G\,&amp;lt;/math&amp;gt;の点の部分集合は, それを除去すると残ったグラフが2点以上をもち, かつ連結(強連結)でなくなるとき, 点カットという. 辺カット(点カット)の大きさの最小値を辺連結度(点連結度)という.&lt;br /&gt;
&lt;br /&gt;
=== 詳説 ===&lt;br /&gt;
　無向グラフ&amp;lt;math&amp;gt;G=(V,E)\, &amp;lt;/math&amp;gt;において，&amp;lt;math&amp;gt;V\, &amp;lt;/math&amp;gt;上の二項関係&amp;lt;math&amp;gt;R_1\, &amp;lt;/math&amp;gt;を2点&amp;lt;math&amp;gt;u\, &amp;lt;/math&amp;gt;と&amp;lt;math&amp;gt;v\, &amp;lt;/math&amp;gt;の間に路が存在するとき&amp;lt;math&amp;gt;uR_1 v\, &amp;lt;/math&amp;gt;と定めると&amp;lt;math&amp;gt;R_1\, &amp;lt;/math&amp;gt;は同値関係となる．&amp;lt;math&amp;gt;R_1\, &amp;lt;/math&amp;gt;による各同値類の誘導する部分グラフは連結成分 (component) と呼ばれる．また，&amp;lt;math&amp;gt;e\, &amp;lt;/math&amp;gt;上の二項関係&amp;lt;math&amp;gt;R_2\, &amp;lt;/math&amp;gt;を2本の辺&amp;lt;math&amp;gt;e\, &amp;lt;/math&amp;gt;と&amp;lt;math&amp;gt;e'\, &amp;lt;/math&amp;gt;を通る閉路が存在するとき&amp;lt;math&amp;gt;eR_2 e'\, &amp;lt;/math&amp;gt;と定めると&amp;lt;math&amp;gt;R_2\, &amp;lt;/math&amp;gt;は同値関係となる．&amp;lt;math&amp;gt;R_2\, &amp;lt;/math&amp;gt;による各同値類の誘導する部分グラフは2連結成分(biconnected component) と呼ばれる．2つ以上の2連結成分に属する点は関節点 (articulation point) と呼ばれる (グラフからこの点を除くと非連結となる)．有向グラフ&amp;lt;math&amp;gt;G=(V,E)\, &amp;lt;/math&amp;gt;において，&amp;lt;math&amp;gt;V\, &amp;lt;/math&amp;gt;上の二項関係&amp;lt;math&amp;gt;R_3\, &amp;lt;/math&amp;gt;を2点&amp;lt;math&amp;gt;u\, &amp;lt;/math&amp;gt;と&amp;lt;math&amp;gt;v\, &amp;lt;/math&amp;gt;の間に&amp;lt;math&amp;gt;u\, &amp;lt;/math&amp;gt;から&amp;lt;math&amp;gt;v\, &amp;lt;/math&amp;gt;への有向路と&amp;lt;math&amp;gt;v\, &amp;lt;/math&amp;gt;から&amp;lt;math&amp;gt;u\, &amp;lt;/math&amp;gt;への有向路とが存在するとき&amp;lt;math&amp;gt;uR_3 v\, &amp;lt;/math&amp;gt;と定めると&amp;lt;math&amp;gt;R_3\, &amp;lt;/math&amp;gt;は同値関係となる．&amp;lt;math&amp;gt;R_3\, &amp;lt;/math&amp;gt;による各同値類の誘導する部分グラフは強連結成分 (strong component) と呼ばれる．無向(有向)グラフはそれ自体が１つの連結成分(強連結成分)であるとき連結 (connected)(強連結(strongly connected))であるという．&lt;br /&gt;
&lt;br /&gt;
　無向 (有向) グラフの2点&amp;lt;math&amp;gt;s,t\, &amp;lt;/math&amp;gt;に対し，&amp;lt;math&amp;gt;s\, &amp;lt;/math&amp;gt;から&amp;lt;math&amp;gt;t\, &amp;lt;/math&amp;gt;への辺素である (すなわち互いに辺を共有しない) 路の本数の最大値を&amp;lt;math&amp;gt;s,t\, &amp;lt;/math&amp;gt;間の[[局所辺連結度]] (local edge connectivity) という．この値は，&amp;lt;math&amp;gt;s\, &amp;lt;/math&amp;gt;から&amp;lt;math&amp;gt;t\, &amp;lt;/math&amp;gt;への路をなくすために取り除くべき辺の本数の最小値に等しい(辺型のMengerの定理)．また，&amp;lt;math&amp;gt;s\, &amp;lt;/math&amp;gt;から&amp;lt;math&amp;gt;t\, &amp;lt;/math&amp;gt;への内素である(すなわち&amp;lt;math&amp;gt;s,t\, &amp;lt;/math&amp;gt;以外では点を共有しない)路の本数の最大値を&amp;lt;math&amp;gt;s,t\, &amp;lt;/math&amp;gt;間の[[局所点連結度]] (local vertex connectivity) という．この値は，&amp;lt;math&amp;gt;s\, &amp;lt;/math&amp;gt;から&amp;lt;math&amp;gt;t\, &amp;lt;/math&amp;gt;への辺が存在しないとき，&amp;lt;math&amp;gt;s\, &amp;lt;/math&amp;gt;から&amp;lt;math&amp;gt;t\, &amp;lt;/math&amp;gt;への路をなくすために取り除くべき&amp;lt;math&amp;gt;s,t\, &amp;lt;/math&amp;gt;以外の点の個数の最小値に等しい(点型のMengerの定理)．&lt;br /&gt;
&lt;br /&gt;
　無向(有向)グラフ&amp;lt;math&amp;gt;G\, &amp;lt;/math&amp;gt;の辺の部分集合は，それを除去するとグラフが連結(強連結)でなくなるとき，辺カットという．&amp;lt;math&amp;gt;G\, &amp;lt;/math&amp;gt;の点の部分集合は，それを除去するとグラフが2点以上をもち，かつ連結(強連結)でなくなるとき，点カットという．辺カット(点カット)の大きさの最小値を[[辺連結度]] (edge connectivity)([[点連結度]] (vertex connectivity))という．これらの値は辺(点)に重みが付いているときは重み和の最小値として定義することもある．辺連結度(点連結度)が&amp;lt;math&amp;gt;k\, &amp;lt;/math&amp;gt;以上であるグラフを&amp;lt;math&amp;gt;k\, &amp;lt;/math&amp;gt;辺連結(&amp;lt;math&amp;gt;k\, &amp;lt;/math&amp;gt;点連結)であるという．重みなし無向グラフ&amp;lt;math&amp;gt;G=(V,E)\, &amp;lt;/math&amp;gt;の点連結度&amp;lt;math&amp;gt;\kappa(G)\, &amp;lt;/math&amp;gt;，辺連結度&amp;lt;math&amp;gt;\lambda(G)\, &amp;lt;/math&amp;gt;，最小次数&amp;lt;math&amp;gt;\delta(G)\, &amp;lt;/math&amp;gt;の間には，次の不等式が成り立つ．&amp;lt;math&amp;gt;\kappa(G)\leq \lambda(G)\leq \delta(G)\leq 2|E|/|V|\, &amp;lt;/math&amp;gt;．&lt;br /&gt;
&lt;br /&gt;
　グラフの辺連結度(点連結度)は全点対間の局所辺連結度(局所点連結度)の最小値に一致する．局所辺連結度や局所点連結度は，最大フロー・最小カット定理の特別な場合であるメンガーの定理により特徴づけされるので，これらの連結度(および連結度を決めている辺カットや点カットの１つ）はフローアルゴリズムをもちいて多項式時間で計算できる [3]．任意の無向グラフには２点間の局所辺連結度(局所点連結度)が一方の点の次数に等しい２点が存在し，そのような点対を線形時間で見つけることができる [8]．このような点対を繰り返し縮約していくことで辺連結度を容易に求めることもできる [9]．&lt;br /&gt;
&lt;br /&gt;
　指定点&amp;lt;math&amp;gt;s\, &amp;lt;/math&amp;gt;を持つ重みなし有向グラフに対し，&amp;lt;math&amp;gt;s\, &amp;lt;/math&amp;gt;を含む点の真部分集合から残りの点の集合へ向かう有向辺の集合を&amp;lt;math&amp;gt;s\, &amp;lt;/math&amp;gt;-カットと呼ぶとき，&amp;lt;math&amp;gt;s\, &amp;lt;/math&amp;gt;-カットの大きさの最小値は，&amp;lt;math&amp;gt;s\, &amp;lt;/math&amp;gt;を根とする有向全域出木(すなわち全域木に根から葉へ向かって辺に向きをつけたもの)の互いに辺素な集合の最大値に等しい(J.Edmondsの定理 [1] )．大きさ最小の&amp;lt;math&amp;gt;s\, &amp;lt;/math&amp;gt;-カットを多項式時間で求めることができる．&lt;br /&gt;
&lt;br /&gt;
　与えられた無向(有向)グラフの辺連結度，あるいは点連結度を指定された目標値まで大きくするためにグラフに最小費用の辺の集合を付加する問題を[[連結度増大問題]] (connectivity augmentation problem)と呼ぶ．この問題はNP困難であるが [2] ，付加辺の本数を最小にする場合には，以下の問題に対して多項式時間の解法が知られている．無向(有向)グラフの辺連結度を目標値まで上げる問題，無向グラフの点連結度を4以下の目標値に上げる問題，有向グラフの点連結度を１だけ上げる問題．&lt;br /&gt;
&lt;br /&gt;
　無向(有向)グラフにおいて１つの点&amp;lt;math&amp;gt;s\, &amp;lt;/math&amp;gt;を選び，&amp;lt;math&amp;gt;s\, &amp;lt;/math&amp;gt;に接続する２本の (有向) 辺&amp;lt;math&amp;gt;(u,s),(s,v)\, &amp;lt;/math&amp;gt;を1本の(有向)辺&amp;lt;math&amp;gt;(u,v)\, &amp;lt;/math&amp;gt;に取り替える操作を辺分離という．このとき，次の[[辺分離定理]] (edge splitting theorem) が知られている．&amp;lt;math&amp;gt;s\, &amp;lt;/math&amp;gt;に接続する２本の辺をうまく選ぶと辺分離後も，グラフの辺連結度(正確には&amp;lt;math&amp;gt;s\, &amp;lt;/math&amp;gt;以外の２点間の局所辺連結度の最小値)を変化させずに保つことができる[5, 7]．特に，無向グラフに対しては(特殊な場合を除き)，辺分離後に&amp;lt;math&amp;gt;s\, &amp;lt;/math&amp;gt;以外のすべての２点間の局所辺連結度を変化させない２本の辺の選択が存在する [6]．辺分離定理は連結度増大問題を解くアルゴリズムに使われている[4]．&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
'''参考文献'''&lt;br /&gt;
&lt;br /&gt;
[1] J. Edmonds &amp;quot;Edge-disjoint branchings,&amp;quot; ''Combinatorial Algorithms'', R. Rustin, eds., Algorithmics Press, New York (1973) 91-96.&lt;br /&gt;
&lt;br /&gt;
[2] K. P. Eswaran and R. E. Tarjan, &amp;quot;Augmentation problems,&amp;quot; ''SIAM Journal on Computing'', 5 (1976), 653-665.&lt;br /&gt;
&lt;br /&gt;
[3] S. Even and R. E. Tarjan, &amp;quot;Network flow and testing graph connectivity,&amp;quot; ''SIAM Journal on Computing'', '''4''' (1975), 507-518.&lt;br /&gt;
&lt;br /&gt;
[4] A. Frank, &amp;quot;Augmenting graphs to meet edge-connectivity requirements,&amp;quot; ''SIAM Journal on Discrete Mathematics'', '''5''' (1992), 25-53.&lt;br /&gt;
&lt;br /&gt;
[5] L. Lov&amp;amp;aacute;sz, ''Combinatorial Problems and Exercises'', North-Holland  1979.&lt;br /&gt;
&lt;br /&gt;
[6] W. Mader, &amp;quot;A reduction method for edge-connectivity in graphs,&amp;quot; ''Ann. Discrete Math.'', 3 (1978), 145-164.&lt;br /&gt;
&lt;br /&gt;
[7] W. Mader, &amp;quot;Konstruktion aller ''n''-fach kantenzusammenh&amp;amp;auml;ngenden Digraphen,&amp;quot; ''Europ. J. Combinatorics'', 3 (1982), 63-67.&lt;br /&gt;
&lt;br /&gt;
[8] H. Nagamochi, &amp;quot;Graph algorithms for network connectivity problems,&amp;quot; ''Journal of the Operations Research Society of Japan'', '''47''' (2004) , 199-223.&lt;br /&gt;
&lt;br /&gt;
[9] H. Nagamochi and T. Ibaraki, &amp;quot;A linear-time algorithm for finding a sparse ''k''-connected spanning subgraph of a ''k''-connected graph,&amp;quot; ''Algorithmica'', '''7''' (1992), 583-596.&lt;br /&gt;
&lt;br /&gt;
[10] H. Nagamochi and T. Ibaraki, &amp;quot;Computing edge-connectivity in multigraphs and capacitated graphs,&amp;quot; ''SIAM Journal on Discrete Mathematics'', '''5''' (1992), 54-66.&lt;br /&gt;
&lt;br /&gt;
[11] アルゴリズムデータベース　http://www-or.amp.i.kyoto-u.ac.jp/algo-eng/db/&lt;br /&gt;
&lt;br /&gt;
[[Category:グラフ･ネットワーク|れんけつど]]&lt;br /&gt;
&lt;br /&gt;
[[Category:組合せ最適化|れんけつど]]&lt;/div&gt;</summary>
		<author><name>Albeit-Kun</name></author>
	</entry>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E9%80%A3%E9%96%A2%E5%9B%B3%E6%B3%95&amp;diff=11166</id>
		<title>連関図法</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E9%80%A3%E9%96%A2%E5%9B%B3%E6%B3%95&amp;diff=11166"/>
		<updated>2008-11-14T00:46:34Z</updated>

		<summary type="html">&lt;p&gt;Albeit-Kun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''【れんかんずほう (relation diagram)】'''&lt;br /&gt;
&lt;br /&gt;
新QC七つ道具の1つで, 原因-結果, 目的-手段などが絡み合った問題について, その関係を論理的につないでいくことによって問題を解明する手法である. 原因や結果, 目的や手段などを1項目ずつカードに書き, それらの関係を矢線で結び, それらの関係を明確にする目的で作成する.&lt;br /&gt;
&lt;br /&gt;
[[category:企画・開発・プロジェクト・品質・ヒューマン|れんかんずほう]]&lt;/div&gt;</summary>
		<author><name>Albeit-Kun</name></author>
	</entry>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%83%AC%E3%83%99%E3%83%AB_(%E8%A8%88%E7%AE%97%E5%B9%BE%E4%BD%95%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B)&amp;diff=11165</id>
		<title>レベル (計算幾何における)</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%83%AC%E3%83%99%E3%83%AB_(%E8%A8%88%E7%AE%97%E5%B9%BE%E4%BD%95%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B)&amp;diff=11165"/>
		<updated>2008-11-14T00:46:12Z</updated>

		<summary type="html">&lt;p&gt;Albeit-Kun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''【れべる (level)】'''&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;math&amp;gt;d\,&amp;lt;/math&amp;gt;次元超平面アレンジメントにおいて, &amp;lt;math&amp;gt;x_d\,&amp;lt;/math&amp;gt;軸に平行な直線で貫いたときに下から &amp;lt;math&amp;gt;k\,&amp;lt;/math&amp;gt;番目となる交点をもつフェイス全体の集合を, &amp;lt;math&amp;gt;k\,&amp;lt;/math&amp;gt;-レベル, または単にレベルという. 2次元の場合, 高々&amp;lt;math&amp;gt;k\,&amp;lt;/math&amp;gt;までのレベルのサイズは&amp;lt;math&amp;gt;{\rm O}(kn)\,&amp;lt;/math&amp;gt;であり,  &amp;lt;math&amp;gt;k\,&amp;lt;/math&amp;gt;-レベルのサイズは&amp;lt;math&amp;gt;{\rm O}(\sqrt{k}n)\,&amp;lt;/math&amp;gt;となる. 双対性より, これは平面の&amp;lt;math&amp;gt;n\,&amp;lt;/math&amp;gt; 点を直線で等分割する方法の数が&amp;lt;math&amp;gt;{\rm O}(n^{1.5})\,&amp;lt;/math&amp;gt;であることも意味する. &amp;lt;math&amp;gt;k\,&amp;lt;/math&amp;gt;-レベルを&amp;lt;math&amp;gt;{\rm O}(\sqrt{k}n(\log n)^2)\,&amp;lt;/math&amp;gt;時間で 求める平面走査法アルゴリズムが知られている.&lt;br /&gt;
&lt;br /&gt;
[[Category:計算幾何|れべる]]&lt;/div&gt;</summary>
		<author><name>Albeit-Kun</name></author>
	</entry>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%83%AC%E3%83%90%E3%83%AC%E3%83%83%E3%82%B8&amp;diff=11164</id>
		<title>レバレッジ</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%83%AC%E3%83%90%E3%83%AC%E3%83%83%E3%82%B8&amp;diff=11164"/>
		<updated>2008-11-14T00:45:47Z</updated>

		<summary type="html">&lt;p&gt;Albeit-Kun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''【ればれっじ (leverage)】'''&lt;br /&gt;
&lt;br /&gt;
以下の状態をレバレッジ効果という. &lt;br /&gt;
&lt;br /&gt;
:(1) 自己資産を担保にして資金を借り入れることにより,  もとの資産より大きなポジションを取ること. &lt;br /&gt;
&lt;br /&gt;
:(2) オプションや先物などを利用することで, 現物を保有するより低い費用で, 現物を保有しているときと同等のポジションを構築すること.&lt;br /&gt;
&lt;br /&gt;
[[category:ファイナンス|ればれっじ]]&lt;/div&gt;</summary>
		<author><name>Albeit-Kun</name></author>
	</entry>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E5%8A%A3%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%A9%E3%83%95%E3%83%AD%E3%83%BC%E5%95%8F%E9%A1%8C&amp;diff=11163</id>
		<title>劣モジュラフロー問題</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E5%8A%A3%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%A9%E3%83%95%E3%83%AD%E3%83%BC%E5%95%8F%E9%A1%8C&amp;diff=11163"/>
		<updated>2008-11-14T00:45:26Z</updated>

		<summary type="html">&lt;p&gt;Albeit-Kun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''【れつもじゅらふろーもんだい (submodular flow problem)】'''&lt;br /&gt;
&lt;br /&gt;
劣モジュラフロー問題は, 最小費用フロー問題や共通マトロイド問題といった効率的に解くことのできる離散最適化問題の多くを含んだ広範な枠組である. 劣モジュラ関数の最小化を行う効率的な手続きの存在を仮定した上で, 最小費用フロー問題に関するアルゴリズムの拡張に当たる組合せ的な解法が開発されている.&lt;br /&gt;
&lt;br /&gt;
[[Category:グラフ･ネットワーク|れつもじゅらふろーもんだい]]&lt;/div&gt;</summary>
		<author><name>Albeit-Kun</name></author>
	</entry>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E5%8A%A3%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%A9%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0&amp;diff=11162</id>
		<title>劣モジュラシステム</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E5%8A%A3%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%A9%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0&amp;diff=11162"/>
		<updated>2008-11-14T00:45:04Z</updated>

		<summary type="html">&lt;p&gt;Albeit-Kun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''【れつもじゅらしすてむ (submodular system)】'''&lt;br /&gt;
&lt;br /&gt;
有限集合 &amp;lt;math&amp;gt;N\,&amp;lt;/math&amp;gt; の部分集合族 &amp;lt;math&amp;gt;\mathcal{D}\subseteq 2^{N}\,&amp;lt;/math&amp;gt; に関して, &amp;lt;math&amp;gt;\emptyset,N\in \mathcal{D}\,&amp;lt;/math&amp;gt; かつ &amp;lt;math&amp;gt;X,Y\in\mathcal{D}\Rightarrow X\cup Y, X\cap Y\in{\mathcal D}\,&amp;lt;/math&amp;gt; が成り立つものとする. このとき, &amp;lt;math&amp;gt;{\mathcal D}\,&amp;lt;/math&amp;gt; は分配束をなす. 劣モジュラ関数 &amp;lt;math&amp;gt;f:{\mathcal D}\to{\mathbf R}\,&amp;lt;/math&amp;gt; が &amp;lt;math&amp;gt;f(\emptyset)=0\,&amp;lt;/math&amp;gt; を満たすとき, &amp;lt;math&amp;gt;(\mathcal{D},f)\,&amp;lt;/math&amp;gt; を劣モジュラシステムという.&lt;br /&gt;
&lt;br /&gt;
[[Category:グラフ･ネットワーク|れつもじゅらしすてむ]]&lt;/div&gt;</summary>
		<author><name>Albeit-Kun</name></author>
	</entry>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E5%8A%A3%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%A9%E9%96%A2%E6%95%B0&amp;diff=11161</id>
		<title>劣モジュラ関数</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E5%8A%A3%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%A9%E9%96%A2%E6%95%B0&amp;diff=11161"/>
		<updated>2008-11-14T00:44:30Z</updated>

		<summary type="html">&lt;p&gt;Albeit-Kun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''【れつもじゅらかんすう (submodular function)】'''&lt;br /&gt;
&lt;br /&gt;
分配束 &amp;lt;math&amp;gt;{\mathcal D}\,&amp;lt;/math&amp;gt; 上の関数 &amp;lt;math&amp;gt;f\,&amp;lt;/math&amp;gt; が, 任意の &amp;lt;math&amp;gt;X,Y\in{\mathcal D}\,&amp;lt;/math&amp;gt; に対して&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;f(X)+f(Y)\geq f(X\cup Y)+f(X\cap Y)&amp;lt;/math&amp;gt; &lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
を満たすとき, &amp;lt;math&amp;gt;f\,&amp;lt;/math&amp;gt; を劣モジュラ関数という. 劣モジュラ性は, ネットワークのカット容量関数, マトロイドの階数関数, 多元情報源のエントロピー関数, 協力凸ゲームの特性関数等, オペレーションズ・リサーチの諸分野に現れる基本的な関数に共通する有用な性質である.&lt;br /&gt;
&lt;br /&gt;
[[Category:グラフ･ネットワーク|れつもじゅらかんすう]]&lt;/div&gt;</summary>
		<author><name>Albeit-Kun</name></author>
	</entry>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E5%8A%A3%E5%8B%BE%E9%85%8D%E6%B3%95&amp;diff=11160</id>
		<title>劣勾配法</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E5%8A%A3%E5%8B%BE%E9%85%8D%E6%B3%95&amp;diff=11160"/>
		<updated>2008-11-14T00:44:03Z</updated>

		<summary type="html">&lt;p&gt;Albeit-Kun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''【れつこうばいほう (subgradient method)】'''&lt;br /&gt;
&lt;br /&gt;
微分不可能な関数における非線形最適化手法の1つ. 最適解に近づくように, 解を改善する方向ベクトル(劣勾配)と, その方向に移動する距離とを求め, これを繰り返しながら解を改善する. 組合せ最適化問題(最小化とする)において, ラグランジュ緩和問題が簡単に解けるような場合には, 適切なラグランジュ乗数を決定する問題が, (微分不可能な)区分線形関数の最大値を求める問題になることから, よりよい下界値を求めるときに常套的に用いられる.&lt;br /&gt;
&lt;br /&gt;
[[Category:組合せ最適化|れつこうばいほう]]&lt;/div&gt;</summary>
		<author><name>Albeit-Kun</name></author>
	</entry>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E5%8A%A3%E5%8B%BE%E9%85%8D&amp;diff=11159</id>
		<title>劣勾配</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E5%8A%A3%E5%8B%BE%E9%85%8D&amp;diff=11159"/>
		<updated>2008-11-14T00:43:39Z</updated>

		<summary type="html">&lt;p&gt;Albeit-Kun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''【れつこうばい (subgradient)】'''&lt;br /&gt;
&lt;br /&gt;
真凸関数 &amp;lt;math&amp;gt;f: {\mathbf R}^n \to (-\infty,+\infty)\,&amp;lt;/math&amp;gt; に対して, 次式を満足するベクトル &amp;lt;math&amp;gt;\xi \in {\mathbf R}^n\,&amp;lt;/math&amp;gt; を &amp;lt;math&amp;gt;f\,&amp;lt;/math&amp;gt; の &amp;lt;math&amp;gt;x\,&amp;lt;/math&amp;gt; における劣勾配といい, 劣勾配全体の集合を &amp;lt;math&amp;gt;\partial f(x)\,&amp;lt;/math&amp;gt; と表す.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;f(y) \ge f(x) + \xi^{\top}(y-x) \quad\quad \forall \, y \in {\mathbf R}^n&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
真凸関数はその実効定義域 &amp;lt;math&amp;gt;\mbox{dom} \, f := \{ x \, | \, f(x) &amp;lt; \infty \}\,&amp;lt;/math&amp;gt; の任意の相対的内点において, 少なくとも1つの劣勾配をもつ. 特に, 凸関数 &amp;lt;math&amp;gt;f\,&amp;lt;/math&amp;gt; が点 &amp;lt;math&amp;gt;x\,&amp;lt;/math&amp;gt; において微分可能ならば, &amp;lt;math&amp;gt;f\,&amp;lt;/math&amp;gt; の &amp;lt;math&amp;gt;x\,&amp;lt;/math&amp;gt; における劣勾配は唯一存在し, 通常の勾配 &amp;lt;math&amp;gt;\nabla f(x)\,&amp;lt;/math&amp;gt; に等しい.&lt;br /&gt;
&lt;br /&gt;
[[Category:非線形計画|れつこうばい]]&lt;/div&gt;</summary>
		<author><name>Albeit-Kun</name></author>
	</entry>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E5%88%97%E6%8C%99%E6%B3%95&amp;diff=11158</id>
		<title>列挙法</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E5%88%97%E6%8C%99%E6%B3%95&amp;diff=11158"/>
		<updated>2008-11-14T00:43:16Z</updated>

		<summary type="html">&lt;p&gt;Albeit-Kun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''【れっきょほう (enumerative method)】'''&lt;br /&gt;
&lt;br /&gt;
組み合せ最適化問題や多段階決定問題などで, すべての可能な場合を列挙して最適解を求める方法. 全数列挙法(total enumeration method, brute force enumeration)ともいわれる. 分枝限定法の考え方の出発点である. 多段確率決定問題では1つの列挙法として決定樹表(ツリーテーブル)がある.&lt;br /&gt;
&lt;br /&gt;
[[Category:動的・確率・多目的計画|れっきょほう]]&lt;/div&gt;</summary>
		<author><name>Albeit-Kun</name></author>
	</entry>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%83%AC%E3%82%AA%E3%83%B3%E3%83%86%E3%82%A3%E3%82%A8%E3%83%95%E9%80%86%E8%A1%8C%E5%88%97&amp;diff=11157</id>
		<title>レオンティエフ逆行列</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%83%AC%E3%82%AA%E3%83%B3%E3%83%86%E3%82%A3%E3%82%A8%E3%83%95%E9%80%86%E8%A1%8C%E5%88%97&amp;diff=11157"/>
		<updated>2008-11-14T00:42:51Z</updated>

		<summary type="html">&lt;p&gt;Albeit-Kun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''【れおんてぃえふぎゃくぎょうれつ (Leontief inverse matrix)】'''&lt;br /&gt;
&lt;br /&gt;
産業連関分析において, 産業の生産額を&amp;lt;math&amp;gt;X\,&amp;lt;/math&amp;gt;, 投入係数表を&amp;lt;math&amp;gt;A\,&amp;lt;/math&amp;gt;, 最終需要を&amp;lt;math&amp;gt;F\,&amp;lt;/math&amp;gt;, 輸入を&amp;lt;math&amp;gt;M\,&amp;lt;/math&amp;gt;とすれば, 生産と需要のバランスは&amp;lt;math&amp;gt;AX+F-M=X\,&amp;lt;/math&amp;gt;となる. この式を&amp;lt;math&amp;gt;X\,&amp;lt;/math&amp;gt;について解くと&amp;lt;math&amp;gt;X=(I-A)^{-1}(F-M)\,&amp;lt;/math&amp;gt;と求められる. &amp;lt;math&amp;gt;I\,&amp;lt;/math&amp;gt;は単位行列である. 行列&amp;lt;math&amp;gt;(I-A)^{-1}\,&amp;lt;/math&amp;gt;をレオンティエフ逆行列と呼ぶ. この行列は逆行列が存在すれば&amp;lt;math&amp;gt;(I-A)^{-1} = I+A+A^2+\cdots\,&amp;lt;/math&amp;gt;と展開することができる. 第1項は直接の需要の生産に, 第2項以降は波及的間接需要の生産に対応している.&lt;br /&gt;
&lt;br /&gt;
[[category:公共システム|れおんてぃえふぎゃくぎょうれつ]]&lt;/div&gt;</summary>
		<author><name>Albeit-Kun</name></author>
	</entry>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%83%AC%E3%83%B4%E3%82%A3%E3%83%BC%E9%81%8E%E7%A8%8B&amp;diff=11156</id>
		<title>レヴィー過程</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%83%AC%E3%83%B4%E3%82%A3%E3%83%BC%E9%81%8E%E7%A8%8B&amp;diff=11156"/>
		<updated>2008-11-14T00:42:26Z</updated>

		<summary type="html">&lt;p&gt;Albeit-Kun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''【 れう゛ぃーかてい (Levy process) 】'''&lt;br /&gt;
           &lt;br /&gt;
実数値をとる連続時間[[確率過程]]&amp;lt;math&amp;gt;\{X(t)\}&amp;lt;/math&amp;gt;が&lt;br /&gt;
独立かつ定常な増分をもつとき，&lt;br /&gt;
&amp;lt;math&amp;gt;\{X(t)\}&amp;lt;/math&amp;gt;をレヴィー過程と呼ぶ．&lt;br /&gt;
例えば，[[ポアソン過程]]はレヴィー過程である．&lt;br /&gt;
一般に，&lt;br /&gt;
レヴィー過程は[[ブラウン運動]]と離散的にのみ変化するジャンプ過程の和として&lt;br /&gt;
表すことができる．&lt;br /&gt;
&lt;br /&gt;
[[category:待ち行列|れう゛ぃーかてい]]&lt;/div&gt;</summary>
		<author><name>Albeit-Kun</name></author>
	</entry>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%83%AA%E3%83%B3%E3%83%89%E3%83%AC%E3%83%BC%E3%81%AE%E6%96%B9%E7%A8%8B%E5%BC%8F&amp;diff=11155</id>
		<title>リンドレーの方程式</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%83%AA%E3%83%B3%E3%83%89%E3%83%AC%E3%83%BC%E3%81%AE%E6%96%B9%E7%A8%8B%E5%BC%8F&amp;diff=11155"/>
		<updated>2008-11-14T00:42:00Z</updated>

		<summary type="html">&lt;p&gt;Albeit-Kun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''【りんどれーのほうていしき (Lindley's equation)】'''&lt;br /&gt;
&lt;br /&gt;
客の到着が再生過程にしたがう GI/G/1 モデルにおいて, 到着間隔分布とサービス時間分布をそれぞれ &amp;lt;math&amp;gt;F(t)\,&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;H(t)\,&amp;lt;/math&amp;gt; と表すとき, 先着順サービスでの待ち時間の定常分布 &amp;lt;math&amp;gt;W(t)\,&amp;lt;/math&amp;gt; に関する次の積分方程式をリンドレーの方程式という. ただし, &amp;lt;math&amp;gt;C(t)\,&amp;lt;/math&amp;gt; は&amp;quot;サービス時間&amp;lt;math&amp;gt;-\,&amp;lt;/math&amp;gt;到着間隔&amp;quot;を表す分布関数である. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;table align=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td rowspan=&amp;quot;2&amp;quot;&amp;gt;&amp;lt;math&amp;gt;W(t) = &lt;br /&gt;
\left\{&lt;br /&gt;
\begin{array}{l}&lt;br /&gt;
\\&lt;br /&gt;
\\&lt;br /&gt;
\\&lt;br /&gt;
\\&lt;br /&gt;
\end{array}&lt;br /&gt;
\right. \, &amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\int^{\infty}_{0-} C(t-x) \mbox{d} W(x) \, &amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;(t \geq 0) \,&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;0 \, &amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;(t &amp;lt; 0) \, &amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ただし, &amp;lt;math&amp;gt;\textstyle C(t)=\int^{\infty}_{x=0} H(t+x) \mathrm {d}F(x)\ \ \ -\infty &amp;lt; t &amp;lt; +\infty \,&amp;lt;/math&amp;gt;である.&lt;br /&gt;
&lt;br /&gt;
[[category:待ち行列|りんどれーのほうていしき]]&lt;/div&gt;</summary>
		<author><name>Albeit-Kun</name></author>
	</entry>
</feed>