在電腦科學中,trie,又稱字首樹或字典樹,是一種有序樹,用於儲存關聯陣列,其中的鍵通常是字串。與二叉查詢樹不同,鍵不是直接儲存在節點中,而是由節點在樹中的位置決定。乙個節點的所有子孫都有相同的字首,也就是這個節點對應的字串,而根節點對應空字串。一般情況下,不是所有的節點都有對應的值,只有葉子節點和部分內部節點所對應的鍵才有相關的值。
trie中的鍵通常是字串,但也可以是其它的結構。
舉例:當有四個字串時:「abc」,」bce」,」abd」,」bef」.下圖中:邊上的是字元,樹內的數字是以當前字元結尾的字串有多少個。比如,加入」bef」後,f後面的數字就由0–>1,再加入」be」後,『e』處的數值就由0變成了1;求:有多少個字串以「be」做為字首?直接找到「be」處的』e』的數字即可。
每個結點有三個屬性值
記錄有多少個字元經過這個節點
記錄有多少個字串以當前節點結束
每個節點的路徑
查詢
刪除
字首數量
public
class
code_01_trietree
}public
static
class
trie
public
void
insert
(string word)
char
chs = word.
tochararray()
; trienode node = root;
int index =0;
for(
int i =
0; i < chs.length; i++
) node = node.nexts[index]
; node.path++;}
node.end++;}
public
void
delete
(string word)
node = node.nexts[index];}
node.end--;}
}public
intsearch
(string word)
char
chs = word.
tochararray()
; trienode node = root;
int index =0;
for(
int i =
0; i < chs.length; i++
) node = node.nexts[index];}
return node.end;
}public
intprefixnumber
(string pre)
char
chs = pre.
tochararray()
; trienode node = root;
int index =0;
for(
int i =
0; i < chs.length; i++
) node = node.nexts[index];}
return node.path;}}
public
static
void
main
(string[
] args)
}
Mysql字首樹 字首樹(Trie樹,字典樹)
給出字串,如 abc 從頭結點開始,依次檢查,有沒有走向a的路,如果沒有,就新建出來,a作為路上的值 不是結點的值 如果有的話,就復用 在字串的結尾處的結點的值 1,表示有乙個是以該字串結尾的 1.可以查是否某個字串是以某個字串為字首的 2.還可以查 新增了幾次該字首 有多少字串是以該結點結尾的 3...
Mysql字首樹 Trie 字首樹 字典樹 詳解
1 字典樹的概念 字典樹,因為它的搜尋快捷的特性被單詞搜尋系統使用,故又稱單詞查詢樹。它是一種樹形結構的資料結構。之所以快速,是因為它用空間代替了速度。2 字典樹的特點 字典樹有三個基本性質 1 根節點不包含字元,除根節點外每乙個節點都只包含乙個字元 2 從根節點到某乙個節點,路徑上經過的字元連線起...
字首樹 字典樹
trie 樹是乙個有根的樹,其結點具有以下字段 最多 rr 個指向子結點的鏈結,其中每個鏈結對應字母表資料集中的乙個字母。本文中假定 rr 為 26,小寫拉丁字母的數量。布林字段,以指定節點是對應鍵的結尾還是只是鍵字首。trie 發音為 try 或字首樹是一種樹資料結構,用於檢索字串資料集中的鍵。這...