字典樹 模板 記錄

2021-07-03 06:56:27 字數 1896 閱讀 4593

字典樹:很強大的資料結構,實現多個字串的查詢、對其個數的紀錄以及對其子串的查詢。

這裡講下建樹過程:

準備:max 記錄總節點數目

char str[1010][50];//輸入的字串集 

int ch[max][30];//字典樹的實現

int word[max];//記錄當前節點下有多少個單詞

int val[max];//標記單詞節點

int sz;//節點數

初始化:

void init()

返回字元的ascll碼值:

int idx(char x)

插入字串:

void insert(char *s)

u = ch[u][c];

word[u]++;//單詞數加一

} val[u] = 1;//標記單詞節點

}

查詢以字串s為字首的字串 在字串集中有多少個

int findnum(char *s)//查詢以該s為字首的字串有多少個  

return word[u];

}

查詢並輸出字串在串集裡面唯一確定的最短字首 :

void findprefix(char *s)

}

判斷該字串是不是串集裡某個字串字首 :

bool judgeprefix(char *s)

return false;//是字首

}

判斷字串是否由串集裡的兩個字串構成: 假設該字串分s1,s2兩部分,這裡只實現s1的查詢

bool finds(char *s)

return val[u];//最後乙個是不是單詞節點

}

大模板:

#include #include #define max 50000+10

using namespace std;

char str[1010][50];//輸入的字串集

int ch[max][30];//字典樹的實現

int word[max];//記錄當前節點下有多少個單詞

int val[max];//標記單詞節點

int sz;//節點數

int idx(char x)

void init()

void insert(char *s)

u = ch[u][c];

word[u]++;//單詞數加一

} val[u] = 1;//標記單詞節點

}//查詢以字串s為字首的字串 在字串集中有多少個

int findnum(char *s)//查詢以該s為字首的字串有多少個

return word[u];

} //查詢並輸出字串在串集裡面唯一確定的最短字首

void findprefix(char *s) }

//判斷該字串是不是串集裡某個字串字首

bool judgeprefix(char *s)

return false;//是字首

} //判斷字串是否由串集裡的兩個字串構成:假設該字串分兩部分,這裡只實現一部分的查詢

bool finds(char *s)

return val[u];//最後乙個是不是單詞節點

}



字典樹模板

字典樹,又稱單詞查詢樹,trie樹,是一種樹形結構,典型應用是用於統計,排序和儲存大量的字串,所以經常被搜尋引擎系統用於文字詞頻統計。它的優點是 利用字串的公共字首來節約儲存空間,最大限度的減少無謂的字串比較,查詢效率比雜湊表高。字典樹的應用 字串的快速檢索 雜湊最長公共字首 include usi...

字典樹模板

package template public class triemod trie root new trie for string s str if find root,asdf else public static void insert final trie root,string str ...

字典樹模板

字典樹 字典樹,又稱單詞查詢樹,trie樹,是一種樹形結構,雜湊表的乙個變種。用於統計,排序和儲存大量的字串 也可以儲存其 的 優點就是利用公共的字首來節約儲存空間。在這舉個簡單的例子 比如說我們想儲存3個單詞,nyist nyistacm nyisttc。如果只是 單純的按照以前的字元陣列儲存的思...