字典樹的主要性質
根節點不包含字元,除根節點外每乙個節點都只包含乙個字元;
從根節點到某一節點,路徑上經過的字元連線起來,為該節點對應的字串;
每個節點的所有子節點包含的字元都不相同。
基本功能實現
建立乙個 trienode 的類,構建內建字典結構
class
trienode
:def
__init__
(self)
: self.nodes =
dict()
# 構建字典
self.is_leaf =
false
插入乙個字到字典樹中
def
insert
(self, word:
str)
: curr = self
for char in word:
if char not
in curr.nodes:
curr.nodes[char]
= trienode(
) curr = curr.nodes[char]
curr.is_leaf =
true
插入一列表的字到字典樹中
def
insert_many
(self, words:
[str])
:for word in words:
self.insert(word)
在字典樹裡面查詢乙個字
def
search
(self, word:
str)
: curr = self
for char in word:
if char not
in curr.nodes:
return
false
curr = curr.nodes[char]
return curr.is_leaf
最終**class
trienode
:def
__init__
(self)
: self.nodes =
dict()
# 構建字典
self.is_leaf =
false
definsert
(self, word:
str)
: curr = self
for char in word:
if char not
in curr.nodes:
curr.nodes[char]
= trienode(
) curr = curr.nodes[char]
curr.is_leaf =
true
definsert_many
(self, words:
[str])
:for word in words:
self.insert(word)
defsearch
(self, word:
str)
: curr = self
for char in word:
if char not
in curr.nodes:
return
false
curr = curr.nodes[char]
return curr.is_leaf
例項應用
隨意插入一些資料,然後進行查詢,驗證是否可用
#建立乙個trienode的類,構建內建字典結構
class
trienode
:def
__init__
(self)
:#構建字典
self.nodes=
dict()
#用於標記狀態
self.is_leaf=
false
#插入乙個字到字典樹中
definsert
(self,word:
str)
:#指標用於標記,移動的節點位置
curr=self
for char in word:
#如果字元不存在已有的節點中,則新建
if char not
in curr.nodes:
curr.nodes[char]
=trienode(
)#繼續下乙個字元節點
curr=curr.nodes[char]
#狀態 curr.is_leaf=
true
#插入多個字到字典中
definsert_many
(self,words:
[str])
:for word in words:
self.insert(word)
defsearch
(self,word:
str)
:#用於標記位置
curr=self
#遍歷查詢
for char in word:
#如果不在其中節點,結束,在則訪問下一字元節點
if char not
in curr.nodes:
return
false
curr=curr.nodes[char]
# 返回查詢狀態
return curr.is_leaf
#初始化例項
trie = trienode(
)#插入多個資料
trie.insert_many(
["good"
,"jia"
,"something"
,"somebody"
,"somebody1"])
#插入單個資料
trie.insert(
"somebody3"
)# 查詢
python實現各種常用演算法之搜尋演算法(12)
順序搜尋也稱為線性搜尋,屬於無序查詢演算法。演算法原理 思路 從資料結構線性表的一端開始,順序掃瞄,依次將掃瞄到的結點關鍵字與給定值 k 相比較,若相等則表示查詢成功 若掃瞄結束仍沒有找到關鍵字等於 k 的結點,表示查詢失敗。複雜度分析 演算法實現 思路 從順序表的頭部依次遍歷元素,判斷是否匹配,若...
python實現各種常用演算法之資料結構(1)
棧 stack 又名堆疊,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。棧允許進行插入和刪除操作的一端稱為棧頂 top 另一端為棧底 bottom 棧底固定,而棧頂浮動 棧中元素個數為零時稱為空棧。插入一般稱為進棧 push 刪除則稱為退棧 pop 由於堆疊資料結構只允許在一...
python實現各種常用演算法之資料結構(7)
並查集的介紹 建立乙個 union find 的類,並初始化。初始化兩個字典,乙個儲存節點的父節點,另外乙個儲存父節點的大小。初始化的時候,將節點的父節點設為自身,size 設為 1。class union find object def init self,data list self.fathe...