番号1を出発して、矢印の向きに従って、番号 12へ到達する方法について考える。 順列・組合せの理論から簡単に分かるように、 逆戻りしないという条件で、その道順の数は、全 部で324通りある。 実際に、3×6×6×3=324 である。 しかし、この問題設定は、あまり現実的ではない。 通常、移動する経路によって、移動に要する時間 は異なるはずだからである。 このような問題設定において、番号1を出発して、 矢印の向きに従って、番号12へ到達する道順のう ち所要時間が最短の経路を求める手順を考えたい。 |
今、下図のように各経路毎に所要時間が決まっているものとする。
まず、番号mから番号12に移動する最短時間を、 h(m)で表す。明らかに、次が成り立つ。 h(m)=min(f(m,n)+h(n)) 但し、f(m,n)は番号mから番号nに移動するの に要する時間であり、minは、番号mから移動可 能な番号 n を動かしたときの最小値を考えるもの とする。 求めたい値は、h(1)であるが、ゴールから逆算、 すなわち、h(12)から順次求めていくことにより、 問題は解決される。以下にその計算を示す。 |
h(12)=0
h(11)=min(f(11,12)+h(12)、f(11,10)+h(10))=min(2、3+h(10))
h(10)=min(f(10,9)+h(9)、f(10,12)+h(12)、f(10,11)+h(11)
=min(1+h(9)、3、5、6+h(10))=min(1+h(9)、3)
h(9)=min(f(9,12)+h(12)、f(9,10)+h(10))=min(1、1+h(10))=1
よって、h(10)=2、h(11)=2
h(8)=min(f(8,11)+h(11)、f(8,7)+h(7))=min(5、2+h(7))
h(7)=min(f(7,6)+h(6)、f(7,10)+h(10)、f(7,11)+h(11)、f(7,8)+h(8))
=min(1+h(6)、4、3、7、4+h(7))=min(1+h(6)、3)
h(6)=min(f(6,5)+h(5)、f(6,9)+h(9)、f(6,10)+h(10)、f(6,7)+h(7))
=min(3+h(5)、7、7、2+h(6)、4)=min(3+h(5)、4)
h(5)=min(f(5,9)+h(9)、f(5,6)+h(6))=min(5、6+h(5)、7)=5
よって、h(6)=4、h(7)=3、h(8)=5
h(4)=min(f(4,3)+h(3)、f(4,7)+h(7)、f(4,8)+h(8))
=min(1+h(3)、8、9)=min(1+h(3)、8)
h(3)=min(f(3,2)+h(2)、f(3,6)+h(6)、f(3,7)+h(7)、f(3,4)+h(4))
=min(2+h(2)、9、9、2+h(3)、9)=min(2+h(2)、9)
h(2)=min(f(2,5)+h(5)、f(2,6)+h(6)、f(2,3)+h(3))=min(8、6、4+h(2)、11)=6
よって、h(3)=8、h(4)=8
h(1)=min(f(1,2)+h(2)、f(1,3)+h(3)、f(1,4)+h(4))=min(11、12、12)=11
以上から、所要時間が最短な道順は次の通りである。
番号1⇒番号2⇒番号6⇒番号7⇒番号11⇒番号12
例題程度だと、目算で最短経路を見つけることもできる。しかし、上記計算の優れている所
は、あらゆるダイヤグラムに対して、有効な一般的方法であるということである。多少計算は
長いが、その実、計算は全く機械的であり、易しい。
(参考文献:木下栄蔵 著 好奇心の数学(電気書院))