跳到主要内容

京都大学 情報学研究科 知能情報学専攻 2022年8月実施 情報学基礎 F2-2

Author

Isidore, 祭音Myyura

Description

G=(V,E)G = (V, E) を有向グラフとする。 ここで、VVGG の頂点集合、EEGG の辺集合である。 頂点 uu から頂点 vv への有向辺は順序対 (u,v)E(u, v) \in E で表され、距離 l(u,v)>0l(u,v)>0 を持つ。 頂点は 11 から NN で番号付けられており、V={1,2,,N}V = \{1, 2, \ldots, N\} である。 有向グラフの例を図1に示す。 各辺に付された数値はその辺の距離を表す。

頂点 v1v_1 から頂点 vmv_m へと有向辺を辿って到達できるとき、この経路 pp(v1,v2,,vm)(v_1, v_2, \ldots, v_m) で表す。 v1,vmv_1, v_m を除く pp の頂点を中間頂点と呼ぶ。 経路 pp の距離は l(p)=i=1m1l(vi,vi+1)l(p)=\sum_{i=1}^{m-1} l(v_i,v_{i+1}) で与えられる。 頂点 uu から頂点 vv への最短経路は、頂点 uu から頂点 vv への全ての経路のうち距離が最小のものである。

(1) 図1のグラフにおける頂点4から頂点3への最短経路とその距離を求めよ。

(2) 経路 p=(v1,,vi,,vj,,vm)p=(v_1, \ldots, v_i, \ldots, v_j, \ldots, v_m) は、vi=vj (1i<jm)v_i = v_j \ (1 \leq i < j \leq m) のとき、閉路を含むという。 任意の最短経路が閉路を含まないことを証明せよ。

GG の全ての頂点対に対して最短経路の距離を求める問題を考える。 具体的には、頂点番号を利用した動的計画法に基づくアルゴリズムを作る。 全ての中間頂点が {1,2,,k}\{1, 2, \ldots, k\} に含まるという制約下での頂点 ii から頂点 jj への最短経路の距離を δ(i,j,k)\delta(i,j,k) とする (0kN0 \leq k \leq N)。 条件を満たす経路が存在しないとき、δ(i,j,k)=\delta(i,j,k)=\infty とする。 また δ(i,i,k)=0\delta(i,i,k)=0 とする。 k=0k=0 のときは、中間頂点は存在しないとする。 δ(i,j,k)\delta(i,j,k) を使うと、元の問題は全ての i,ji,j について δ(i,j,N)\delta(i,j,N) を求めることとみなせる。

(3) 1kN1 \leq k \leq N のとき δ(i,j,k)=min(δ(i,j,k1),δ(i,k,k1)+δ(k,j,k1))\delta(i,j,k) = \min (\delta(i,j,k-1), \delta(i,k,k-1)+\delta(k,j,k-1)) が成り立つことを示せ。

(4) d(k)d^{(k)} はサイズ N×NN \times N の2次元配列であり、その要素の値は d(k)[i][j]=δ(i,j,k)d^{(k)}[i][j] = \delta(i,j,k) であるとする。 ただし、配列は1で始まるインデックス方式とする。 図1のグラフに対して、d(0),,d(4)d^{(0)}, \ldots, d^{(4)} をこの順番で求めることで、全ての頂点対に対して最短経路の距離を求めよ。

(5) (4) はこのアルゴリズムが N+1N+1 個の2次元配列を必要とすることを示唆するが、実際には1個の2次元配列を用意すれば済むことを示せ。

(6) (5) の結果を用いると次のアルゴリズムを導ける。下の空欄 (a) および (b) を埋めよ。

Kai

(1)

  • The shortest path is (v4,v2,v1,v3)(v_4, v_2, v_1, v_3).
  • The distance is 55.

(2)

Assume that there is a cycle start and end at viv_i in a shortest path p=(v1,...,vi,...,vi,...vm)p=(v_1, ..., v_i, ..., v_i, ...v_m) from v1v_1 to vmv_m. Then,

l(p)=l(v1,,vi)+l(vi,,vi)+l(vi,,vm)l(p) = l(v_1, \ldots, v_i) + l(v_i, \ldots, v_i) + l(v_i, \ldots, v_m)

Since l(u,v)>0l(u,v) > 0 for any edge (u,v)E(u,v) \in E, we have l(vi,,vi)>0l(v_i, \ldots, v_i) > 0. Thus, the path p=(v1...vi...vm)p' = (v_1...v_i...v_m) of weight

l(p)=l(v1,,vi)+l(vi,,vm)l(p') = l(v_1, \ldots, v_i) + l(v_i, \ldots, v_m)

is shorter than pp, which leads to a contradiction with the assumption that pp is a shortest path. Therefore, no shortest path contains a cycle.

(3)

Let pijkp_{ijk} be a shortest path from vertex ii to vertex jj such that all intermediate are contained in {1,,k}\{1, \ldots, k\}. By (2) we know that a shortest path does not contain the same vertex twice, hence there are two possibilities to construct pijkp_{ijk}.

  1. vertex kk is not a vertex on the path, then we have l(pijk)=δ(i,j,k1)l(p_{ijk}) = \delta (i, j, k-1).
  2. vertex kk is a vertex on the path, then the path consists of a subpath from ii to kk and a subpath from kk to jj. Each subpath can only contain intermediate vertices in {1,,k1}\{1, \ldots , k-1\}, and also shortest paths from ii to kk and kk to jj respectively (otherwise a shorter path from ii to jj can be constructed), namely they have lengths δ(i,k,k1)\delta(i, k, k-1) and δ(k,j,k1)\delta(k, j, k-1), respectively. Hence l(pijk)=δ(i,k,k1)+δ(k,j,k1)l(p_{ijk}) = \delta(i, k, k-1) + \delta(k, j, k-1).

Combining the two cases we have

δ(i,j,k)=min(δ(i,j,k1),δ(i,k,k1)+δ(k,j,k1))\delta(i,j,k) = \min (\delta(i,j,k-1), \delta(i, k, k-1) + \delta(k, j, k-1))

(4)

d(0)=[0122002410]d^{(0)}= \begin{bmatrix} 0 & 1 & 2 & \infty \\ 2 & 0 & \infty & \infty \\ \infty & \infty & 0 & 2 \\ 4 & 1 & \infty & 0 \\ \end{bmatrix} d(1)=[012204024160]d^{(1)}= \begin{bmatrix} 0 & 1 & 2 & \infty \\ 2 & 0 & 4 & \infty \\ \infty & \infty & 0 & 2 \\ 4 & 1 & 6 & 0 \\ \end{bmatrix} d(2)=[012204023150]d^{(2)}= \begin{bmatrix} 0 & 1 & 2 & \infty \\ 2 & 0 & 4 & \infty \\ \infty & \infty & 0 & 2 \\ 3 & 1 & 5 & 0 \\ \end{bmatrix} d(3)=[01242046023150]d^{(3)}= \begin{bmatrix} 0 & 1 & 2 & 4 \\ 2 & 0 & 4 & 6 \\ \infty & \infty & 0 & 2 \\ 3 & 1 & 5 & 0 \\ \end{bmatrix} d(4)=[0124204653023150]d^{(4)}= \begin{bmatrix} 0 & 1 & 2 & 4 \\ 2 & 0 & 4 & 6 \\ 5 & 3 & 0 & 2 \\ 3 & 1 & 5 & 0 \\ \end{bmatrix}

(5)

By the formula proposed in (3), we have

δ(i,k,k)=min(δ(i,k,k1),δ(i,k,k1)+δ(k,k,k1))=δ(i,k,k1)\begin{align} \delta(i, k, k) &= \min (\delta(i,k,k-1), \delta(i, k, k-1)+\delta(k, k, k-1))\\ &=\delta(i, k , k-1) \end{align}

which means the elements in the kk-th row or the kk-th column stays the same when deriving d(k)d^{(k)} from d(k1)d^{(k-1)}.

Hence we can derive each new value in-place. Thus, only one array is required.

(6)

  • (a) d[i][j]>d[i][k]+d[k][j]d[i][j] > d[i][k] + d[k][j]
  • (b) d[i][j]d[i][k]+d[k][j]d[i][j] \leftarrow d[i][k] + d[k][j]