Trie Tree
#Trie Tree的基本特點(diǎn)
1)根節(jié)點(diǎn)不包含字符,除根節(jié)點(diǎn)外每個(gè)節(jié)點(diǎn)只包含一個(gè)字符
2)從根節(jié)點(diǎn)到某一個(gè)節(jié)點(diǎn),路徑上經(jīng)過的字符連接起來,為該節(jié)點(diǎn)對(duì)應(yīng)的字符串
3)每個(gè)節(jié)點(diǎn)的所有子節(jié)點(diǎn)包含的字符串不相同
#coding:utf-8
'''
Created on 2011-6-14

@author: Dokie
'''
ALPHABET_SIZE = 26

class Node:
def __init__(self, is_end = False):
self.is_end = is_end
self.prefix_count = 0
self.children = [None for child in range(ALPHABET_SIZE)]

class Trie:
def __init__(self):
self.head = Node()
def insert(self, word):
current = self.head
count = 0
for letter in word:
int_value = ord(letter) - ord('a')
try:
assert ( 0 <= int_value <= 26)
except Exception:
raise Exception("invalid Word")
if current.children[int_value] is None:
current.children[int_value] = Node()
current = current.children[int_value]
count += 1
current.prefix_count = count
current.is_end = True
def search(self, word):
current = self.head
for letter in word:
int_value = ord(letter) - ord('a')
try:
assert (0 <= int_value <= 26)
except Exception:
return False
if current.children[int_value] is None:
return False
else:
current = current.children[int_value]
return current.is_end


def count_words_with_prefix(self, word):
current = self.head
for letter in word:
int_value = ord(letter) - ord('a')
try:
assert (0 <= int_value <= 26)
except Exception:
return None
if current.children[int_value] is None:
return None
else:
current = current.children[int_value]
return current.prefix_count

if __name__ == '__main__':
import doctest
doctest.testmod()
t = Trie()
t.insert("apple")
t.insert("good")
print t.search("apple")
print t.search("fff")
print t.count_words_with_prefix("apple")
1)根節(jié)點(diǎn)不包含字符,除根節(jié)點(diǎn)外每個(gè)節(jié)點(diǎn)只包含一個(gè)字符
2)從根節(jié)點(diǎn)到某一個(gè)節(jié)點(diǎn),路徑上經(jīng)過的字符連接起來,為該節(jié)點(diǎn)對(duì)應(yīng)的字符串
3)每個(gè)節(jié)點(diǎn)的所有子節(jié)點(diǎn)包含的字符串不相同
原理圖:
參考:
數(shù)據(jù)結(jié)構(gòu)之Trie樹
Trie Tree on Answers.com
#Trie Tree簡(jiǎn)單的Python實(shí)現(xiàn)
最近在學(xué)習(xí)Python,下面的代碼就用來學(xué)習(xí)下語法了 :)


















































































posted on 2011-06-14 16:57 XXXXXX 閱讀(1085) 評(píng)論(0) 編輯 收藏 所屬分類: Algorithm