字典樹詳解

2021-08-19 13:55:27 字數 2150 閱讀 7573

字典樹

字典樹(又叫單詞查詢樹、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樹的主要操作是插入 查詢,也可以進行刪除。插...