# -*- coding: utf-8 -*-
class
node
(object):
""" 建立trie樹節點,包含私有變數,isend表示是否是詞的末尾節點
name表示儲存的值
son__nodes表示子節點
"""#python中沒有private,用兩個下劃線表示私有變數。
def__init__
(self,isend,name):
self.__isend=isend
self.__name=name
self.__son_nodes =
defget_name
(self):
return self.__name
#python中對私有變數的get和set方法
defset_name
(self, value):
self.__name = value
defget_isend
(self):
return self.__isend
defset_isend
(self,value):
self.__isend=value
defget_son_nodes
(self):
return self.__son_nodes
defset_son_nodes
(self,value):
self.__son_nodes=value
defadd_son
(self,son_node):
""" 新增子節點
:param son_node:子節點
:return:
"""def
findnode
(self,name):
""" 判斷name節點是不是在子節點中,如果在返回子節點,如果不在返回-1
:param name:
:return:
"""for node in self.__son_nodes:
if node.get_name()==name:
return node
return
none
class
trietree:
""" 樹類root變數保證只能建立乙個樹
"""root=node(false,"root")
def__init__
(self):
pass
definsert
(self,word):
""" 在node新新增子節點
:param word:需要新增的詞語
:param node:在node的後面新增節點
:return:
"""currentnode=self.root
lenghts=len(word)
for i in range(0,lenghts):
now_node=currentnode.findnode(word[i])
if now_node is
none:
new_node=node(false,word[i])
currentnode=new_node
else:
currentnode = now_node
currentnode.set_isend(true)
#建立字典樹
# file=open("/home/liusenubuntu/file/segment/newdict.txt","r",encoding="utf8")
file=["左側壁","右側壁","左右側壁"]
tree=trietree()
for word in file:
tree.insert(word.strip())
print("構建成功")
Trie樹的實現
一 定義 trie,又稱字典樹,是一種用於快速檢索的二十六叉樹結構。典型的空間換時間 二 結構圖 三 原理 特別地 和二叉查詢樹不同,在trie樹中,每個結點上並非儲存乙個元素。四 性質 0 利用串的公共字首,節約記憶體 1 在trie樹上進行檢索總是始於根結點 2 根節點不包含字元,除根節點外的每...
python實現感知機
import numpy as np 定義啟用函式 def acti fun x return 1 if x 0 else 0 建立感知器類 class perception object 初始化權重 def init self self.weights 0 self.bias 1 定義訓練函式,包...
python實現AND感知機
and感知機通過訓練後,可以進行邏輯 與 的運算。例如 當輸入 1,1時,輸出為1 輸入1,0時,輸出為0。通過上圖,我們可以發現 0,0 0,1 1,0 這三個點數表示輸出為0,而點 1,1 表示輸出為1,所以我們可以近似找到一條直線將輸出為0的點與輸出為1的點分隔開。我們可以通過不斷訓練係數 即...