python實現各種常用演算法之資料結構(8)

2021-10-01 19:36:01 字數 3480 閱讀 7551

字典樹的主要性質

根節點不包含字元,除根節點外每乙個節點都只包含乙個字元;

從根節點到某一節點,路徑上經過的字元連線起來,為該節點對應的字串;

每個節點的所有子節點包含的字元都不相同。

基本功能實現

建立乙個 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...