Dynamic programming--find longest sub sequence
sequence1 =['A', 'B', 'C', 'D', 'E']
sequence2 =['A', 'E','C', 'D', 'F']
m = [[0]*10for i in range(1,10)]
dir = [[0]*10for i in range(1,10)]
def find_longeset_sequence(sq1, sq2):
for i in range(0, len(sequence1)):
m[0][i]=0
for i in range(0, len(sequence2)):
m[i][0]=0
for i in range(1, len(sequence1)):
for j in range(1, len(sequence2)):
k1 = i
k2 = j
if (sequence1[k1]==sequence2[k2]):
m[k1][k2] = m[k1-1][k2-1]+1
dir[i][j]=1
elif (m[k1-1][k2]>=m[k1][k2-1]):
m[k1][k2] = m[k1-1][k2]
dir[i][j]=2
else:
m[k1][k2] = m[k1][k2-1]
dir[i][j]=3
def generate_sequence(sequence,i, j, a, m):
if (m[i][j]==0):
return
else:
if dir[i][j]==1:
a.append(sequence[i])
generate_sequence(sequence,i-1,j-1,a,m)
elif dir[i][j]==2:
generate_sequence(sequence,i-1,j,a,m)
else:
generate_sequence(sequence,i,j-1,a,m)
a=[]
find_longeset_sequence(sequence1,sequence2)
generate_sequence(sequence1,4,4,a,m)
print a
for i in range(1,9):
print m[i]

浙公网安备 33010602011771号