Advertisement
Guest User

Untitled

a guest
Oct 16th, 2019
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.20 KB | None | 0 0
  1. # Base case where at least one string is empty
  2. def deletion_distance_base(str1, str2):
  3. deletions = 0
  4. if len(str1) == 0 or len(str2) == 0:
  5. return max(len(str1), len(str2)) + deletions
  6.  
  7.  
  8. def deletion_distance_recursive(str1, str2):
  9. if len(str1) == 0 or len(str2) == 0:
  10. return max(len(str1), len(str2))
  11. # To help with readability
  12. d = deletion_distance_recursive
  13. if str1[-1] == str2[-1]:
  14. return 0 + d(str1[:-1], str2[:-1])
  15. return 1 + min(d(str1[:-1], str2), d(str1, str2[:-1]))
  16.  
  17.  
  18. def deletion_distance_2d_dp(str1, str2):
  19. optimal = [[0 for x in range(len(str2)+1)] for x in range(len(str1)+1)]
  20. for i in range(len(str1)+1):
  21. for j in range(len(str2)+1):
  22. if i == 0:
  23. optimal[i][j] = j
  24. elif j == 0:
  25. optimal[i][j] = i
  26. elif str1[i-1] == str2[j-1]:
  27. optimal[i][j] = optimal[i-1][j-1]
  28. else:
  29. optimal[i][j] = 1 + min(optimal[i-1][j], optimal[i][j-1])
  30. return optimal[-1][-1]
  31.  
  32. def deletion_distance_1d_dp(str1, str2):
  33. if len(str2) > len(str1):
  34. str1, str2 = str2, str1
  35. prev_memo = [0 for i in range(len(str2)+1)]
  36. cur_memo = [0 for i in range(len(str2)+1)]
  37. for i in range(len(str1)+1):
  38. for j in range(len(str2)+1):
  39. if i == 0:
  40. cur_memo[j] = j
  41. elif j == 0:
  42. cur_memo[j] = i
  43. elif str1[i-1] == str2[j-1]:
  44. continue
  45. else:
  46. cur_memo[j] = 1 + min(prev_memo[j], cur_memo[j-1])
  47.  
  48. prev_memo = cur_memo
  49. cur_memo = [0 for i in range(len(str2)+1)]
  50.  
  51. return prev_memo[-1]
  52.  
  53. class MyTestCases(unittest.TestCase):
  54.  
  55. def test_deletion_distance_base_case(self):
  56. self.assertEqual(deletion_distance_base('', 'test'), 4)
  57. self.assertEqual(deletion_distance_base('', ''), 0)
  58.  
  59. def test_deletion_distance_recursive(self):
  60. self.assertEqual(deletion_distance_recursive('', 'test'), 4)
  61. self.assertEqual(deletion_distance_recursive('', ''), 0)
  62. self.assertEqual(deletion_distance_recursive('dog', 'frog'), 3)
  63. self.assertEqual(deletion_distance_recursive('some', 'some'), 0)
  64. self.assertEqual(deletion_distance_recursive('some', 'thing'), 9)
  65. self.assertEqual(deletion_distance_recursive('', ''), 0)
  66.  
  67. def test_deletion_distance_2d_dp(self):
  68. self.assertEqual(deletion_distance_2d_dp('', 'test'), 4)
  69. self.assertEqual(deletion_distance_2d_dp('', ''), 0)
  70. self.assertEqual(deletion_distance_2d_dp('dog', 'frog'), 3)
  71. self.assertEqual(deletion_distance_2d_dp('some', 'some'), 0)
  72. self.assertEqual(deletion_distance_2d_dp('some', 'thing'), 9)
  73. self.assertEqual(deletion_distance_2d_dp('', ''), 0)
  74.  
  75. def test_deletion_distance_1d_dp(self):
  76. self.assertEqual(deletion_distance_1d_dp('', 'test'), 4)
  77. self.assertEqual(deletion_distance_1d_dp('', ''), 0)
  78. # self.assertEqual(deletion_distance_1d_dp('dog', 'frog'), 3)
  79. self.assertEqual(deletion_distance_1d_dp('some', 'some'), 0)
  80. self.assertEqual(deletion_distance_1d_dp('some', 'thing'), 9)
  81. self.assertEqual(deletion_distance_1d_dp('', ''), 0)
  82.  
  83. # print(deletion_distance(str1,str2))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement