trie樹
演算法簡介:
字典樹,也叫trie樹,是一種比較實用的資料結構,無論是在acm競賽的題目中,還是字串相關的某些實際應用領域內,它都能發揮巨大的作用。
首先來看看字典樹的本質是什麼。它其實是一棵儲存了很多字串的樹,這棵樹上的每一條邊就是某個或某些字串中的乙個字元,而從根節點到某乙個特定節點所經過的一條路徑上的所有邊組成的就是字典樹所儲存的某乙個字串。不難看出,字典樹就是一顆多叉樹,它利用字串的字首來建立了這棵樹,從而達到了節省儲存空間(所有相同字首都只儲存一次),優化查詢速度(查詢單個單詞是否存在的時間複雜度僅為該單詞的長度)的目的。
個人理解:
快速的查詢單詞,統計字首,但是需要犧牲大量的空間。
字典樹的兩個難點1、如何表達字典樹的多叉屬性 2、如何標記字串的結束。其實這兩個問題就是對應字典樹的插入和查詢操作。
建立的過程中跟普通叉樹的建立過程很相似,這裡要注意next節點陣列與flag的用法,next非null即表示存在。flag表示代表字首的個數,例如字典樹裡邊有cbzzzz和 cbfff,則b節點的flag就等於2,有兩個字串公用到了cb這個字首。
**:
#include using namespace std;
const int maxn=26;
struct trie
}*root;
//1、插入操作
//將某乙個資訊插入字典樹,其實就是依次將該資訊的字首資訊儲存在對應節點中,並修改相應標記的值即可。
void insert(string s)
//如果存在則繼續往下走
else
}}//2、查詢操作
//查詢某個資訊是否存在於字典樹中,實質上也是將該資訊的字首資訊與字典樹上儲存的對應位置的資訊進行匹配,然後判斷標記的值即可。
int query(string s)
//返回以該資訊為字首的資訊的個數
return p->flag;
}//3、刪除操作
//遞迴釋放字典樹的每乙個節點占用的空間即可。
void free(trie *t)
delete(t);
}int main()
字典樹(Trie樹)模板
結構 struct node head 生成節點 動態分配記憶體 node newnode 靜態分配記憶體 node t 1000000 int t 0 node newnode 注意 1 在此之前head一定要先分配,否則無法執行,這裡自己老是出錯。2 還有如果處理多組資料的話一定要注意清空t陣列...
Trie字典樹 模板整理
首先附上學習字典樹參考的部落格鏈結 字典樹,又稱單詞查詢樹,trie樹,是一種樹形結構,是一種雜湊樹的變種。典型應用是用於統計,排序和儲存大量的字元 串 但不僅限於字串 所以經常被搜尋引擎系統用於文字詞頻統計。它的優點是 利用字串的公共字首來減少查詢時間,最大限度地減少無謂的字串比較,查詢效率比雜湊...
trie字典樹 模板題
字典樹是一種實現字串快速檢索的多叉樹結構。每個節點都擁有很多個指標。1 include 2 include 3 using namespace std 4 5 const int n 1e6 5,m 5e5 5 6 7 int trie m 26 tot 0,cnt m 陣列模擬樹,8 cnt i ...