Advertisement
DMG

Text search (BF, BM, KMP)

DMG
Jun 4th, 2014
232
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.92 KB | None | 0 0
  1. def bruteForceSearch(wantedString, text):
  2.     if len(wantedString) > len(text):
  3.         return -1
  4.  
  5.     for i in range(len(text) - len(wantedString) + 1):
  6.         p = True
  7.         for j in range(len(wantedString)):
  8.             if wantedString[j] != text[i + j]:
  9.                 p = False
  10.                 break
  11.  
  12.         if p == True:
  13.             return i
  14.             break
  15.  
  16.     return -1
  17.  
  18.  
  19. def lastOccurence(string):
  20.     table = {}
  21.  
  22.     for i in xrange(len(string)-1, -1, -1):
  23.         if not string[i] in table:
  24.             table.update({string[i]: i})
  25.  
  26.     return table
  27.  
  28. def BoyerMooreSearch(wantedString, text):
  29.     table = lastOccurence(wantedString)
  30.  
  31.     i = j = len(wantedString) - 1
  32.  
  33.     while i < len(text):
  34.         if wantedString[j] == text[i]:
  35.             if j == 0:
  36.                 return i
  37.             else:
  38.                 i -= 1
  39.                 j -= 1
  40.         else:
  41.             if text[i] in table:
  42.                 l = table[text[i]]
  43.             else:
  44.                 l = -1
  45.  
  46.             i = i + len(wantedString) - min(j, l + 1)
  47.             j = len(wantedString) - 1
  48.  
  49.     return -1
  50.  
  51.  
  52. def failureFunction(string):
  53.     array = []
  54.  
  55.     array.append(0)
  56.     i = 1
  57.     j = 0
  58.  
  59.     while i < len(string):
  60.         if string[i] == string[j]:
  61.             array.append(j + 1)
  62.             i = i + 1
  63.             j = j + 1
  64.         elif j > 0:
  65.             j = array[j-1]
  66.         else:
  67.             array[0] = 0
  68.             i = i + 1
  69.  
  70.     return array
  71.  
  72. def KnuthMorrisPrattSearch(wantedString, text):
  73.     FailureFunction = failureFunction(wantedString)
  74.     i = j = 0
  75.     while i < len(text):
  76.         if text[i] == wantedString[j]:
  77.             if j == len(wantedString) - 1:
  78.                 return i - j
  79.             else:
  80.                 j = j + 1
  81.                 i = i + 1
  82.         elif j > 0:
  83.             j = FailureFunction[j - 1]
  84.         else:
  85.             i = i + 1
  86.  
  87.     return -1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement