EditDistance(A[1. . . n],B[1. . .m]) |
D(i,0)←iandD(0,j)←jfor alli,j for jfrom1tom: for ifrom1ton: insertion←D(i,j−1) +1 deletion←D(i−1,j) +1 match←D(i−1,j−1) mismatch←D(i−1,j−1) +1 if A[i] =B[j]: D(i,j)←min(insertion,deletion,match) else: D(i,j)←min(insertion,deletion,mismatch) return D(n,m) |
OutputAlignment(i,j)
if i=0andj=0:
return
if i>0andD(i, j)=D(i−1, j)+1:
OutputAlignment(i−1,j)
else if j>0andD(i,j)=D(i,j−1)+1:
OutputAlignment(i,j−1)
print B[j]
else:
OutputAlignment(i−1,j−1)
Knapsack with repetitiions
Knapsack(W) |
value(0)←0 value(w)←0 if wi≤w: if val > value(w): value(w)←val return value(W) |
Knapsack without repetitions
Knapsack(W) |
initialize allvalue(0,j)←0 initialize allvalue(w,0)←0 for ifrom1ton: for wfrom1toW: if wi≤w: val ← value(w−wi,i−1) +vi if value(w,i)<val value(w,i)←val return value(W,n) |
Memoization
Knapsack(w) |
if wis in hash table: return value(w) value(w)←0 if wi≤w: if val > value(w): value(w)←val return value(w) |