字典樹
字典樹(又叫單詞查詢樹、trietree),是一種樹形結構,典型應用是用於統計,排序和儲存大量的字串(但不僅限於字串)。主要思想是利用字串的公共字首來節約儲存空間。很好地利用了串的公共字首,節約了儲存空間。字典樹主要包含兩種操作,插入和查詢
是一種雜湊樹的變種,常用於,統計,排序,儲存大量字串(但不僅限於字串),主要實現方法是利用串的公共字首來減少查詢時間,減少了不必要的比較,不僅節約了儲存空間,而且檢索的效率比雜湊表要高。
下面我們先理解一下字典樹的結構
如圖
節點代表放入的字元,綠色為公共字首,我們可以把字典樹看成乙個連續的有很多分叉口的路,而單詞的結尾相當於你要到的目的地,如果沒有到達目的地的路就新建一條,如果有就只需要走建好的(公共字首).並且只要有乙個分叉口,即使公共字首相同,也不會到達同乙個目的地, 所以字典樹不存在重複問題.
下面介紹字典樹的實現及**(陣列模擬)
建樹操作;
const int maxn=10000;//提前估計好可能會開的節點的個數
int tot; //節點編號,模擬申請新節點,靜態申請
int trie[10000][26]; //假設每個節點的分支有26個(如果是數字0-9)
bool vis[10000]; //判斷該節點是不是單詞結尾,也可以開int紀錄出現次數
插入操作
void insert(char *s,int rt)//引數是字串和節點數,建立字典樹
for(int i=0; s[i]; i++)
int x=s[i]-'a';//假設單詞都是小寫字母組成(這裡我們用26個字母順序編號表示插入字元)
if(trie[rt][x]==0) //若不存在該節點,開新節點
trie[rt][x]=++tot;//表示字元的編號
rt=trie[rt][x]; //代表該字元在rt層節點
vis[rt]=true;//整個字串讀完後,在vis陣列中記錄第rt層為單詞結尾
查詢bool find(char *s,int rt)
for(int i=0; s[i]; i++)
int x=s[i]-'a';//假設單詞都是小寫字母組成
if(trie[rt][x]==0)
return false;//節點不存在,說明單詞不存在,直接返回
rt=trie[rt][x];
return vis[rt]; //如果是被標記的,則說明該串在樹中
初始化tot=0;//一開始沒有節點
int rt=++tot;//申請乙個根節點
memset(trie[rt],0,sizeof(trie[rt]));//初始化根節點
memset(isw,false,sizeof(isw));//初期化標記陣列
模板
#include #include const int maxn=10000;//提前估計好可能會開的節點的個數
int tot; //節點編號,模擬申請新節點,靜態申請
int trie[10000][26]; //假設每個節點的分支有26個
bool isw[10000]; //判斷該節點是不是單詞結尾
void insert(char *s,int rt)//引數是字串和節點數,建立字典樹
rt=trie[rt][x]; //代表該字元在rt層節點
}isw[rt]=true;//整個字串讀完後,在isw陣列中記錄第rt層為單詞結尾
}bool find(char *s,int rt)
rt=trie[rt][x];
}return isw[rt]; //如果是被標記的,則說明該串在樹中
}char s[22];//單詞讀入
int main()
while(scanf("%s",s),s[0]!='#') //查單詞,以乙個'#'結束
return 0;
}
謝謝**。
字典樹詳解
字典樹又稱為單詞查詢樹,trie樹,是一種樹形結構,是雜湊樹的一種變種。典型應用是用於統計,排序和儲存大量的字串 但不僅限於字串 所以經常被搜尋引擎系統用於文字詞頻統計。它的優點是 利用字串的公共字首來減少查詢時間,最大限度地減少無謂的字串比較,查詢效率比雜湊樹高。如圖所示 性質 1 根節點不包含字...
Mysql字首樹 Trie 字首樹 字典樹 詳解
1 字典樹的概念 字典樹,因為它的搜尋快捷的特性被單詞搜尋系統使用,故又稱單詞查詢樹。它是一種樹形結構的資料結構。之所以快速,是因為它用空間代替了速度。2 字典樹的特點 字典樹有三個基本性質 1 根節點不包含字元,除根節點外每乙個節點都只包含乙個字元 2 從根節點到某乙個節點,路徑上經過的字元連線起...
Trie樹(字典樹)
trie樹的核心思想是用空間換時間,通過在樹中儲存字串的公共字首,來達到加速檢索的目的。例如,對於一棵儲存由英文本母組成的字串的trie樹,如下圖 trie樹在實現的時候,可以用左兒子右兄弟的表示方法,也可以在每個節點處開設乙個陣列,如上圖的方法。trie樹的主要操作是插入 查詢,也可以進行刪除。插...