大阪大学 情報科学研究科 情報数理学専攻 2018年8月実施 情報数理学 情報基礎
Author
祭音Myyura (co-authored with GPT 5.6 SOL)
Description
配列 T[1..n], P[1..m] に1桁の非負整数 0,…,9 が格納され、n>m とする。次のアルゴリズムを考える。
アルゴリズム A
t ← 0; p ← 0
for i ← 1 until m do
t ← 10t + T[i]
p ← 10p + P[i]
end for
for s ← 0 until n-m do
if t = p then print s end if
if s < n-m then
t ← 10t + T[s+m+1] - 10^m T[s+1]
end if
end for
アルゴリズム B
for s ← 0 until n-m do
c ← 0
for i ← 1 until m do
if (a) then c ← c+1 end if
end for
if c = m then print s end if
end for
(1) n=8, m=2, T=(7,4,7,8,9,4,7,2), P=(4,7) のとき、Aの出力を求めよ。
(2) BがAと同じ機能を持つように空欄(a)を埋めよ。
(3) 比較(if文)の実行回数を時間計算量とするとき、A、Bそれぞれの計算量と n,m の関係を示せ。
Pi∈Rqi−1×qi(i=1,…,N)の積を、通常の定義 [AB]ij=∑kaikbkj で計算する。
(1) (P1P2)P3 と P1(P2P3) の各スカラー乗算回数を示せ。
(2) Ps⋯Pt の最小乗算回数を α[s,t] とする。α[s,s]=0 とし、s<t に対する漸化式を示せ。
(3) P1∈R3×4, P2∈R4×5, P3∈R5×2, P4∈R2×4 のとき、すべての α[s,t] と最適な括弧付けを求めよ。
有向閉路、自己ループ、多重辺を持たない有向グラフ G=(V,E) に次のアルゴリズムSを実行する。
L ← 空リスト
すべての v ∈ V に対して T(v) を実行
function T(v)
if v が未訪問 then
v に訪問済みの印を付ける
v から出る各辺の終点 w に対して T(w) を実行
v を L の先頭に追加
end if
(1) 次のグラフで訪問順と最終的な L を示せ。頂点と隣接頂点を調べる順は適宜定めてよい。
(2) 最終リスト L で vi が vj より前にあれば、辺 vj→vi は存在しないことを示せ。
(3) G にハミルトン路があるなら、最終リスト L は探索順によらず一意であることを示せ。
Kai
(1) 一致する部分列は T[2..3] と T[6..7] なので、出力は 1,5。
(2) T[s+i]=P[i]。
(3) Aは各 s で2回のif判定を行うから 2(n−m+1) 回、Bは各 s で m+1 回行うから (m+1)(n−m+1) 回である。したがって、それぞれ Θ(n−m+1)、Θ(m(n−m+1)) となる。
(1)
(P1P2)P3: q0q1q2+q0q2q3,P1(P2P3): q1q2q3+q0q1q3.
(2) 最後の積を (Ps⋯Pr)(Pr+1⋯Pt) と分けると
α[s,t]=s≤r<tmin{α[s,r]+α[r+1,t]+qs−1qrqt}.
(3) 区間長の小さい順に計算すると
α[s,t]s=1s=2s=3s=4t=10t=2600t=364400t=48872400
最適括弧付けは (P1(P2P3))P4、乗算回数は 40+24+24=88 回。
(1) 外側の頂点も各頂点の出辺も、添字の昇順で調べるとする。訪問順は
v1,v2,v3,v4,v5,v6,v7.
終了順は v3,v2,v1,v4,v7,v6,v5 なので
L=(v5,v6,v7,v4,v1,v2,v3).
(2) 辺 u→v を調べたとき、v が未訪問なら T(v) は T(u) より先に終了する。訪問済みなら、v が再帰呼出しの途中にある場合は有向閉路を生むので不可能であり、既に終了している。したがってどの場合も v が先に、u が後に終了し、先頭挿入により L では u が v より前となる。よって逆向きの辺は存在しない。
(3) ハミルトン路を w1→w2→⋯→w∣V∣ とする。(2)より各 wi は wi+1 より前に置かれるため、最終リストは必ず (w1,…,w∣V∣) である。