)。
selected_titles =for 標題 in
for 高校 in
高校名單:
if標題.contains(高校):
selected_titles.add(標題)
break
selecttitle
from
tbwhere
title rlike
'清華大學|北京大學|...2657個高校
'
abc、abd、bcd、bce、c、cab、cde假設我們要查詢,「cde」這個字串,在
陣列結構中,我們要遍歷一遍陣列,比較7次才能找到結果,做了比較多的「無用功」。
而在 tire 樹中只需要比較3次就可以找到,它的優勢非常明顯,由於樹型結構我們根本不用考慮左側a、b開頭的兩個分支,這就大大減少了比較的次數,從而減少「無用功」。
colleges = utils.read_file_to_list('key_words.txt')
titles = utils.read_file_to_list('
titles.txt
')
classtrienode:
def__init__
(self):
self.nodes =dict()
#is_end=true 代表從根節點到當前節點構造trie樹的字串(出現在「高校名單」裡)
self.is_end = false
definsert_many(self, items: [str]):
"""支援輸入字串陣列,直接構造乙個 trie 樹
:param items: 字串陣列
:return: none
"""for word in
items:
self.insert(word)
def
insert(self, item: str):
"""向 trie 樹插入乙個短語
:param item: 待插入的字串
:return: none
"""curr =self
for word in
item:
if word not
incurr.nodes:
curr.nodes[word] =trienode()
curr =curr.nodes[word]
curr.is_end = true
def suffix(self, item: str) ->bool:"""匹配字首,也就是判斷item字串是否是以「高校名單」中某個字串開頭
:param item: 待匹配字串
:return: true or false
"""curr =self
for word in
item:
if word not
incurr.nodes:
return
false
curr = curr.nodes[word] #
取得子節點
if curr.is_end: #
如果is_end=true說明當前字串包含了「高校名單」的某個字串
return
true
return false #
未匹配上
def infix(self, item: str) ->bool:for i in
range(len(item)):
sub_item = item[i:] #
將待查詢的字串分成不同子串
#如果子串的字首在 trie 樹中能匹配上
#說明待查詢的字串item中包含「高校名單」中的元素,
#即實現了 tile rlike '清華大學|北京大學|...其他大學' 的功能
ifself.suffix(sub_item):
return
true
return false
#陣列版本
cnt =0
start_time = int(time.time() * 1000)
for title in
titles:
for x in
colleges:
if x in
title:
cnt += 1
break
end_time = int(time.time() * 1000)
(cnt)
print('
spend: %.2fs
' % ((end_time - start_time) / 60.0))#
trie 樹版本
root =trienode()
root.insert_many(colleges)
cnt =0
start_time = int(time.time() * 1000)
for title in
titles:
ifroot.infix(title):
cnt += 1
end_time = int(time.time() * 1000)
(cnt)
print('
spend: %.2fs
' % ((end_time - start_time) / 60.0))
5314spend: 9.13strie5314spend: 0.23s
獲取完整源**
海量資料處理 trie樹
1.什麼是trie樹 trie樹 又稱單詞查詢樹 字典樹 是一種 樹形結構 是一種雜湊樹的變種,是一種用於快速檢索的多叉樹結構。典型應用是用於統計和排序大量的字串 但不僅限於字串 所以經常被搜尋引擎系統用於文字詞頻統計。它的優點是 最大限度地減少無謂的字串比較,查詢效率比雜湊表 高。trie的核心思...
海量資料處理 Trie樹(字典樹)
trie樹,即字典樹,又稱單詞查詢樹或鍵樹,是一種樹形結構。典型應用是用於統計和排序大量的字串 但不僅限於字串 所以經常被搜尋引擎系統用於文字詞頻統計。它的優點是最大限度地減少無謂的字串比較,查詢效率比較高。trie的核心思想是空間換時間,利用字串的公共字首來降低查詢時間的開銷以達到提高效率的目的。...
海量資料的處理 字典樹
trie樹,即字典樹,又稱單詞查詢樹或鍵樹,是一種樹形結構,是一種雜湊樹的變種。典型應用是用於統計和排序大量的字串 但不僅限於字串 所以經常被搜尋引擎系統用於文字詞頻統計。它的優點是 最大限度地減少無謂的字串比較,查詢效率比雜湊表高。trie的核心思想是空間換時間。利用字串的公共字首來降低查詢時間的...