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]

posted @ 2016-04-27 18:24  zhaodonglin  Views(80)  Comments(0)    收藏  举报