算法:
FastestWay(a,t,e,x,n) f1[1]←e1+a1,1 f2[1]←e2+a2,1
for j=2 to n
do if f1[j−1]+a1,j ≤ f2[j−1]+t2,j−1+a1,j
then f1[j]←f1[j−1]+a1,j I1[j]←1
else f1[j]←f2[j−1]+t2,j−1+a1,j I1[j]←2
if f2[j−1]+a2,j ≤ f1[j−1]+t1,j−1+a2,j
then f2[j]←f2[j−1]+a2,j I1[j]←2
else f2[j]←f1[j−1]+t1,j−1+a2,j I1[j]←1
if f1[n]+x1≤f2[n]+x2
then f∗=f1[n]+x1 I∗=1
else f∗=f2[n]+x2 I∗=2
PrintStation(I,n)
i ← I*
print “line” i “,station” n
for j ← n downto 2
do i ←Ii[j]
print “line” i “,station” j-1
MatrixMultiply(A,B)
if columns[A] ≠ rows[B]
then error “incompatible dimensions”
else for i ← 1 to rows[A]
do for j ← 1 to columns[B]
do C[i,j]=0
for k ← 1 to columns[A]
do C[i,j] ← C[i,j] + A[i,k]B[k.j]
【3】.計算解
Matrix-Chain-Order(p)
n ← length[p]-1;
for i ← 1 to n
m[i, i] ← 0;
for I ← 2 to n
for i ← 1 to n – l +1
j ← i + l -1;
m[i, j] ← ∞;
for k ← i to j -1
q ← m[i, k] + m[k+1, j] + pI−1pkpj;
if q < m[i, j]
m[i,j] ← q;
s[i, j] ← k;
return m and s
【4】.構造最優相乘順序
s[i, j]:記錄了AiAi+1…Aj的最優分割順序位置
Matrix-Chain-Multiply(A, s, i, j)
if j > i
X ← Matrix-Chain-Multiply(A, s, i, s[i,j]);
Y ← Matrix-Chain-Multiply(A, s, s[i, j]+1, j);
return Matrix-Multiply(X, Y);
else return Ai;
最長共同子序列LCS
Z =(B,C,A)是X,Y的一個共同子序列
X = (A,B,C,B,D,A,B)
Y = (B, D, C, A, B, A)
X,Y的最長共同子序列爲Z′=(B, D, A, B)
【3】.計算解
LCS算法:
LCSlength(X,Y)
m ← length(X)
n ← length(Y)
for i ← 1 to m
c[i,0] ← 0
for j ← 0 to n
c[0,j] ← 0
for i ← 1 to m
for j ← 1 to n
if xi=yj
c[i,j] ← c[i-1,j-1] + 1
b[i,j] ← “↖”
else if c[i-1,j] ≥ c[i,j-1]
c[i,j] ← c[i-1,j]
b[i,j] ← “↑”
else c[i,j] ← c[i,j-1]
b[i,j] ← “←”
return c and b