在寫完了kmp演算法的部落格之後,我下定決心,一定要寫出一篇關於「ac自動機的部落格」。ac自動機實際上就是字典樹上的kmp演算法。所以,考慮到廣大同學不一定會寫trie樹,特此在此處寫了一篇文章介紹介紹這種資料結構。
(字典樹)又稱單詞查詢樹,trie樹,是一種樹形結構,是一種雜湊樹的變種。典型應用是用於統計,排序和儲存大量的字串(但不僅限於字串),所以經常被搜尋引擎系統用於文字詞頻統計。它的優點是:利用字串的公共字首來減少查詢時間,最大限度地減少無謂的字串比較,查詢效率比雜湊樹高。——360百科看下面一張圖:
這棵字典樹所表示的字串集合為。其中每乙個被染色的結點都是乙個單詞的結尾,表示從根節點到當前結點所走過的的路徑是乙個儲存的字串。我們被染色的結點中儲存它所對應的字串的資訊。這就好像是乙個字典,我可以在乙個字串所對應的結點中儲存這個單詞的定義、用法、以及其它資訊(附加資訊:i結點的附加資訊用val[i]表示)。val[i]>0表示這是乙個單詞,val[i]=0表示這個結點不是乙個單詞的結尾。
我們用next[i][j]表示,i的第j個兒子。假設這個trie樹中的所有字母都是小寫字母,那麼我們可以用j=0表示標有小寫字母『a』的邊,j=25表示標有小寫字母『z』的邊。用這條性質,我們可以嘗試著去寫一下**。
接下來是字典樹的結點用結構體的表示:
int idx(char c)//用於返回乙個字元的索引值
struct trie
...//字典樹的查詢結點和插入結點函式
};
先看一下插入結點的**:
struct trie
nodenow=next[nodenow][charnow];//"當前結點"轉移到下乙個下乙個節點身上
}val[nodenow]=value;//把最後找到的末尾結點附上乙個屬性值}};
然後查詢結點的**和上文是非常像的。
struct trie
return val[nodenow];//找到之後返回結點的權值}};
trie樹是一種簡單的資料結構,以上就是它的全部內容。
在學習了trie樹之後,再配合上kmp的演算法思想,同學們就可以去進修「ac自動機」演算法了。
趕稿匆忙,如有謬誤,望諒解。
字首樹(字典樹,單詞查詢樹,Trie樹)
參考 概述 字首樹又名字典樹,單詞查詢樹,trie樹,是一種多路樹形結構,是雜湊樹的變種,和hash效率有一拼,是一種用於快速檢索的多叉樹結構。典型應用是用於統計和排序大量的字串 但不僅限於字串 所以經常被搜尋引擎系統用於文字詞頻統計。它的優點是 最大限度地減少無謂的字串比較,查詢效率比雜湊表高。t...
Trie樹,又稱單詞查詢樹 字典
答案 trie樹,又稱單詞查詢樹 字典樹,是一種樹形結構,是一種雜湊樹的變種,是 一種用於快速檢索的多叉樹結構。典型應用是用於統計和排序大量的字串 但不僅限於字 符串 所以經常被搜尋引擎系統用於文字詞頻統計。它的優點是 最大限度地減少無謂的 字串比較,查詢效率比雜湊表高。trie樹的核心思想是空間換...
資料結構 Trie(單詞查詢樹,字典樹,字首樹)
trie,又稱字首樹或字典樹,是一種有序樹,用於儲存關聯陣列,其中的鍵通常是字串。與二叉查詢樹不同,鍵不是直接儲存在節點中,而是由節點在樹中的位置決定。乙個節點的所有子孫都有相同的字首,也就是這個節點對應的字串,而根節點對應空字串。一般情況下,不是所有的節點都有對應的值,只有葉子節點和部分內部節點所...