最短経路問題単語

4件
サイタンケイロモンダイ
2.8千文字の記事
  • 7
  • 0pt
掲示板へ

最短経路問題とは、出発点から的地までの最短経路をめる問題である。線形計画問題のひとつ。

概要

例えば、電車を乗り継いで間を移動する場合、複数のルートが考えられることがある。その場合、どの線に乗るか、どの乗り換えるか等で移動距離や所要時間が変化する。では、どのルートを通れば最も効率的に行けるのか。これを考えるのが最短経路問題である。最短経路問題の対になるのは距離、時間、費用など様々あるが、ここではすべて「距離」という表現で統一する。最短経路問題で必要となる情報は、出発点、的地、経由地、各地点のつながり(どこからどこへ直接アクセスできるか)とその距離である。

ダイクストラ法

最短経路問題を解くアルゴリズムのひとつ。

  1. 未確定リスト、確定済リスト、各地点の暫定最短距離、各地点の直前に訪れる地点を記録するため、などを用意する。
  2. すべての地点を未確定リストリストアップする。
  3. 出発点の暫定最短距離を0、その他の地点の暫定最短距離とする。
  4. 未確定リストになるか、的地が確定済リストにあれば10へ飛ぶ。そうでなければ未確定リストの中から暫定最短距離が最も小さいものをひとつ選ぶ(これを地点aとする)。
  5. 地点aを未確定リストから消去し、確定済リストに加える。
  6. 地点aから直接アクセスできる地点の中で、未確定リストに載っているものをすべて見つける。
  7. その各地点について、地点aの暫定最短距離と地点aからの距離を足す。
  8. それが、その地点の暫定最短距離を下回っていたら、暫定最短距離更新し、直前に訪れる地点を地点aにする。
  9. 4に戻る。
  10. 的地の最終的な暫定最短距離の値が最短距離。直前に訪れる地点を出発点に到達するまで順々に巡っていけば、最短ルートがわかる。

解説

未確定リストとは、出発点からの最短距離が未確定な地点のリストのこと。確定済リストとは、最短距離が確定済みの地点のリストのこと。暫定最短距離は、出発点から確定済リストの地点のみを経由してその地点に行ったときの最短距離を表す。確定済リストの地点の暫定最短距離は、確定した最短距離である。であれば、確定済みリストの地点のみを経由しても行けないことを意味している。

出発点から出発点までの距離が0なのは明らかである。よって出発点は確定済リストに加え、それ以外を未確定リストにしてよい。出発点から直接アクセスできる地点をすべて見つけ、それぞれの地点について出発点からの距離を出す。これが暫定最短距離になる。それ以外の地点は、出発点から直接行けないので暫定最短距離である。

ここまででループ(前項の4~9)の1巡までが了する。ループの1巡までは、前項のアルゴリズムと本項の解説で違う部分があるが、結果的には同じになる。アルゴリズム解説より回りくどい方法をとっているのは、プログラムにしたときにソースコードが短くて済むからである。

未確定リストの中で暫定最短距離が最小の地点は、他の未確定リストの地点を経由して行こうとすると、そこに行くだけで距離がかかってしまう。よって、確定済リストの地点のみを経由したほうが最短になることがここで確定する。つまり、最短距離が確定するのである。そこで、その地点を未確定リストから確定済リストに移す。

確定済リスト更新されたので、未確定リストの各地点の暫定最短距離更新される。確定済リストには地点aが追加されただけなので、未確定リストの各地点の暫定最短距離は地点aを経由して行く場合と経由せずに行く場合のうち短いほうとなる。前者なら地点aまでの最短距離と地点aからの距離の和、後者なら(確定済リストに地点aが追加される前の)暫定最短距離となる。地点aから直接行けない場合は地点aを経由することはないため、更新されない。

前2段落の操作を、的地の最短距離が確定するまで繰り返す。

最短経路問題の例です。右図を例にして、AからHまでの最短距離ダイクストラ法でめる。

まず、すべての地点を未確定とし、Aの暫定最短距離を0、その他の地点の暫定最短距離とする。

地点 確定 最短 直前
A 0 -
B -
C -
D -
E -
F -
G -
H -

未確定な地点の中で暫定最短距離が最小なのはAなので、Aを確定済リストへ。Aから直接アクセスできる未確定な地点はBとD。0+1<0+2<なので、BとDの暫定最短距離をそれぞれ更新する。

地点 確定 最短 直前
A 0 -
B 1 A
C -
D 2 A
E -
F -
G -
H -

未確定な地点の中で暫定最短距離が最小なのはBなので、Bを確定済リストへ。Bから直接アクセスできる未確定な地点はCとE。1+5<、1+3<なので、CとEの暫定最短距離をそれぞれ更新する。

地点 確定 最短 直前
A 0 -
B 1 A
C 6 B
D 2 A
E 4 B
F -
G -
H -

未確定な地点の中で暫定最短距離が最小なのはDなので、Dを確定済リストへ。Dから直接アクセスできる未確定な地点はG。2+6<なので、Gの暫定最短距離更新する。

地点 確定 最短 直前
A 0 -
B 1 A
C 6 B
D 2 A
E 4 B
F -
G 8 D
H -

未確定な地点の中で暫定最短距離が最小なのはEなので、Eを確定済リストへ。Eから直接アクセスできる未確定な地点はH。4+8<なので、Hの暫定最短距離更新する。

地点 確定 最短 直前
A 0 -
B 1 A
C 6 B
D 2 A
E 4 B
F -
G 8 D
H 12 E

未確定な地点の中で暫定最短距離が最小なのはCなので、Cを確定済リストへ。Cから直接アクセスできる未確定な地点はF。6+6<なので、Fの暫定最短距離更新する。

地点 確定 最短 直前
A 0 -
B 1 A
C 6 B
D 2 A
E 4 B
F 12 C
G 8 D
H 12 E

未確定な地点の中で暫定最短距離が最小なのはGなので、Gを確定済リストへ。Gから直接アクセスできる未確定な地点はH。8+1<12なので、Hの暫定最短距離更新する。

地点 確定 最短 直前
A 0 -
B 1 A
C 6 B
D 2 A
E 4 B
F 12 C
G 8 D
H 9 G

未確定な地点の中で暫定最短距離が最小なのはHなので、Hを確定済リストへ。Hから直接アクセスできる未確定な地点はない。

地点 確定 最短 直前
A 0 -
B 1 A
C 6 B
D 2 A
E 4 B
F 12 C
G 8 D
H 9 G

Hの最短距離が確定したが、全ての地点が確定するまで続ける。未確定な地点の中で暫定最短距離が最小なのはFなので、Fを確定済リストへ。Fから直接アクセスできる未確定な地点はない。

地点 確定 最短 直前
A 0 -
B 1 A
C 6 B
D 2 A
E 4 B
F 12 C
G 8 D
H 9 G

すべての地点が確定したのでループ脱出。ここから、AからHまでの最短距離は9で最短ルートはA→D→G→Hであることがわかる。さらに、各地点までの最短ルートが次のようになることもわかる。

上の図の最短ルートです。

関連項目

【スポンサーリンク】

  • 7
  • 0pt
記事編集 編集履歴を閲覧

ニコニ広告で宣伝された記事

この記事の掲示板に最近描かれたお絵カキコ

この記事の掲示板に最近投稿されたピコカキコ

ピコカキコがありません

最短経路問題

5 expo_one
2009/11/23(月) 13:56:03 ID: C96zuggwqW
>>2の図の各地点への最短ルートです。
最短ルート
タイトル:最短ルート
この絵を基にしています!
Twitterで紹介する

6 expo_one
2009/11/24(火) 10:25:08 ID: C96zuggwqW
消した部分をペイントゴミの消去。
最短ルート(修正)
タイトル:最短ルート(修正)
この絵を基にしています!
Twitterで紹介する

7 ななしのよっしん
2010/09/15(水) 20:59:44 ID: +XS2pZ6jTT
に図を書いて、端と端をくっつけて最短距離~♪ ・・・なぁんてネタを予想した結果がこれだよ
👍
高評価
0
👎
低評価
0
8 ななしのよっしん
2011/10/01(土) 07:20:15 ID: q+0IizhOjU
マジレスすると、アルゴリズムを考えるうえでそれはなんの役にも立たないからな
1年以上も前のレスだけど
👍
高評価
0
👎
低評価
0
9 ななしのよっしん
2013/01/13(日) 03:44:29 ID: 5jVKUW4hAO
電車乗り換え案内だと

乗り換えに発生する移動時間
・AからBに行くとき、乗り換えなしで行くと10分かかる
・A→Cは5分、C→Bは3分なのでCで乗り換えたほうがいいように見える
・が、C乗り換えるのに3分かかるので、実際には乗り換えると損する

電車の密度
・AからBに行くとき、乗り換えなしで行くと10分かかる
・A→Cは5分、C→Bは3分、Cでの乗り換えは1分なので乗り換えたほうがいいように見える
・が、C→Bの路線は1時間に1本しか走っていないため、よほど乗り継ぎが良くないと待たされてしまうので損する

(省略しています。全て読むにはこのリンクをクリック!)
👍
高評価
0
👎
低評価
0
10 ななしのよっしん
2014/02/18(火) 07:52:58 ID: 3iKO2ebDhF
入り寒天にしたを作って、スタートと分岐点とゴールに餌を置いて、出発点に粘菌を置いとけばアラ不思議。どんなに複雑でも最適解が出るんだとか。場合によってはスパコンよりいそうで。
ちなみにこのネタ、二度もイグノーベル賞取ってるんだよね。都心圏の鉄道道路網を再現しやがった、という話は本当に驚いた。
👍
高評価
0
👎
低評価
0
11 ななしのよっしん
2014/11/11(火) 01:24:41 ID: k9+t4OHtZx
>>10
軽く見たことがあるんだけど粘菌でこんなことできるのかあと感心したよ
あと少し凄い発見があれば本家ノーベル賞も取れるレベル研究だとは思うんだけど
👍
高評価
0
👎
低評価
0
12 ななしのよっしん
2015/02/07(土) 19:22:23 ID: BWFzcrUf9B
解説わかりやすかった!! ありがとう!!
👍
高評価
0
👎
低評価
0
13 ななしのよっしん
2016/03/27(日) 01:33:04 ID: 5jVKUW4hAO
>>10 >>11
今更レスするのもあれなんだけど、
それの応用として「粘菌は強いを嫌う」というのを組み合わせると
粘菌があまり通りたがらないエリア」というのも実現できる

どういうことかというと、山や大きななんかの
できれば避けたいエリア回するべきなのか突っ切るべきなのかまで
粘菌に解かせたりもできるんだな
👍
高評価
0
👎
低評価
0
14 ななしのよっしん
2016/08/12(金) 18:52:04 ID: SQZUuClOmv
つまり的地に効率的に辿り着きたいなら
googleマップに頼るより粘菌を育てたほうがよいってことだな
👍
高評価
0
👎
低評価
0