Advertisement
Guest User

Lab7

a guest
Nov 14th, 2018
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.67 KB | None | 0 0
  1. def find_ED(s1, s2):
  2.     m = len(s1)
  3.     n = len(s2)
  4.     matrix = [[0 for _ in range(0, n+1)] for _ in range(0, m+1)]
  5.  
  6.     # initialize first column and first row
  7.     for i in range(0, m+1):
  8.         matrix[i][0] = i
  9.     for j in range(1, n+1):
  10.         matrix[0][j] = j
  11.  
  12.     # finds shortest distance from top left to bottom right
  13.     for k in range(1, m+1):
  14.         for l in range(1, n+1):
  15.             diff = 0 if(s1[k-1] == s2[l-1]) else 1
  16.             matrix[k][l] = min(matrix[k-1][l] + 1, matrix[k][l-1] + 1, matrix[k-1][l-1] + diff)
  17.  
  18.     # backtrace to build right alignment, go from bottom right to top left
  19.     as1 = ""
  20.     as2 = ""
  21.     d = matrix[m][n]
  22.     while (m > 0) or (n > 0):
  23.         # move diagonally on backtrace, build string accordingly
  24.         if (m > 0) and (n > 0) and (matrix[m-1][n-1] <= matrix[m][n-1]) and (matrix[m-1][n-1] <= matrix[m-1][n]):
  25.             m = -1 if(m == -1) else m-1
  26.             n = -1 if(n == -1) else n-1
  27.             as1 = s1[m] + as1
  28.             as2 = s2[n] + as2
  29.         # move up on backtrace, build string accordingly
  30.         elif(matrix[m][0 if(n <= 0) else n-1] <= matrix[0 if(m<=0) else m-1][n]):
  31.             n = -1 if(n == -1) else n-1
  32.             as1 = "_" + as1
  33.             as2 = s2[0 if (n == -1) else n] + as2
  34.         # move left on backtrace, build string accordingly
  35.         else:
  36.             m = -1 if(m == -1) else m-1
  37.             as1 = s1[0 if (m == -1) else m] + as1
  38.             as2 = "_" + as2
  39.     print(as1)
  40.     print(as2)
  41.     return d
  42.  
  43. word1 = raw_input('Enter in String 1:')
  44. word2 = raw_input('Enter in String 2:')
  45.  
  46. edit_d = find_ED(word1,word2)
  47. print 'The edit distance is {}'.format(edit_d)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement