Guest User

Untitled

a guest
Dec 18th, 2017
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.20 KB | None | 0 0
  1. class Node:
  2. def __init__(self, key=None, data=None):
  3. self.key = key
  4. self.data = data
  5. self.children = dict()
  6.  
  7. def addChild(self, key, data=None):
  8. if not isinstance(key, Node):
  9. self.children[key] = Node(key, data)
  10. else:
  11. self.children[key.label] = key
  12.  
  13. class Trie:
  14. def __init__(self):
  15. self.head = Node()
  16.  
  17. def add_word(self, word):
  18. current_node = self.head
  19. word_finished = True
  20.  
  21. for i in range(len(word)):
  22. if word[i] in current_node.children:
  23. current_node = current_node.children[word[i]]
  24. else:
  25. word_finished = False
  26. break
  27.  
  28. if not word_finished:
  29. while i < len(word):
  30. current_node.addChild(word[i])
  31. current_node = current_node.children[word[i]]
  32. i += 1
  33.  
  34. current_node.data = word
  35.  
  36. def add_words(self, words):
  37. for word in words.split():
  38. self.add_word(word)
  39.  
  40. def has_word(self, word):
  41. if word == '':
  42. return False
  43. if word == None:
  44. raise ValueError('Trie.has_word precisa de uma string valida.')
  45.  
  46. current_node = self.head
  47. exists = True
  48.  
  49. for letter in word:
  50. if letter in current_node.children:
  51. current_node = current_node.children[letter]
  52. else:
  53. exists = False
  54. break
  55.  
  56. if exists:
  57. if current_node.data == None:
  58. exists = False
  59.  
  60. return exists
  61.  
  62. def remove_word(self, word):
  63. if word == '':
  64. return False
  65. if word == None:
  66. raise ValueError('Trie.has_word precisa de uma string valida')
  67.  
  68. current_node = self.head
  69. exists = True
  70.  
  71. for letter in word:
  72. if letter in current_node.children:
  73. current_node = current_node.children[letter]
  74. else:
  75. exists = False
  76. break
  77.  
  78. if exists:
  79. current_node.data = None
  80.  
  81.  
  82. if __name__ == '__main__':
  83.  
  84. trie = Trie()
  85. words = 'sol sal sola cafe pao padeiro padaria'
  86.  
  87. trie.add_words(words)
  88.  
  89. #Testes para busca
  90. print("Teste para busca:\n")
  91. if(trie.has_word('sol') == True):
  92. print("A palavra foi encontrada.\n")
  93. else:
  94. print("A palavra nao foi encontrada.\n")
  95.  
  96. if(trie.has_word('cobre') == True):
  97. print("A palavra foi encontrada.\n")
  98. else:
  99. print("A palavra nao foi encontrada.\n")
  100.  
  101. #Testes para inserção
  102. print("Teste para insercao:\n")
  103. if(trie.has_word('so') == True):
  104. print("A palavra foi encontrada.\n")
  105. else:
  106. print("A palavra nao foi encontrada.\n")
  107.  
  108. trie.add_word('so')
  109.  
  110. if(trie.has_word('so') == True):
  111. print("A palavra foi encontrada.\n")
  112. else:
  113. print("A palavra nao foi encontrada.\n")
  114.  
  115. #Testes para remoção
  116. print("Teste para remocao:\n")
  117. trie.remove_word('sol')
  118.  
  119. if(trie.has_word('sol') == True):
  120. print("A palavra foi encontrada.\n")
  121. else:
  122. print("A palavra nao foi encontrada.\n")
Add Comment
Please, Sign In to add comment