字典樹 Trie樹

2021-06-08 02:16:55 字數 1551 閱讀 8129

字典樹(trie樹):顧名思義是一種樹形結構,屬於雜湊樹的一種。應用於統計、排序、查詢單詞、統計單詞出現的頻率等。它的優點是:利用字串的公共字首來節約儲存空間,最大限度地減少無謂的字串比較,查詢效率比雜湊表高。

字典樹的結構特點:根節點不代表任何字元。其他節點從當前節點回溯到根節點可以得到它代表的字串。當然可以再節點上加乙個記錄該節點所代表單詞的屬性。字典樹的形狀如圖:

字典樹節點的結構:

節點包含26個指標,每個指標代表乙個英文本元節點。26個英文本母那就需要26個指標。節點其他的屬性可根據需要新增。一般包含乙個記錄該節點所代表字元出現次數的屬性。

一種節點定義形式如下:

#define max 26

struct trienode

~trietree(void)

trietree& insert(const char* s)

int search(const char* s,int& count)

void printwordnum()

private:

//插入乙個新的單詞

void trieinsert(trienode* root,const char* s);

//查詢某個單詞是否存在

int triesearch(trienode* root,const char* s,int& count);

//釋放字典樹

void releasetrie(trienode* root);

void wordnum(trienode* root);

private:

trienode* proot;

};

插入乙個單詞的**:

現在是對單詞的統計,所以僅對構成單詞的節點,計數加1,當乙個節點不為空,但計數為0,是僅代表它是某個單詞的字首。

void trietree::trieinsert(trienode* root,const char* s)

p=p->next[index];

i++;

}p->word=new char[strlen(s)+1];

strcpy(p->word,s);

p->count+=1;

}

查詢乙個單詞出現次數的**:

返回1表示查詢成功,count獲得單詞出現次數。

int trietree::triesearch(trienode* root,const char* s,int& count)

if(s[i]==0&&p&&p->count!=0)

else

}

釋放字典樹空間的**:

void trietree::releasetrie(trienode* root)

在對大量的單詞使用insert插入構建好字典樹後,遍歷整個樹,就能的到單詞出現的次數了。

void trietree::wordnum(trienode* root)

Trie樹(字典樹)

trie樹的核心思想是用空間換時間,通過在樹中儲存字串的公共字首,來達到加速檢索的目的。例如,對於一棵儲存由英文本母組成的字串的trie樹,如下圖 trie樹在實現的時候,可以用左兒子右兄弟的表示方法,也可以在每個節點處開設乙個陣列,如上圖的方法。trie樹的主要操作是插入 查詢,也可以進行刪除。插...

字典樹 trie樹

amy 56 ann 15 emma 30 rob 27 roger 52首先存入amy,level 0表示根,不持有資料。其餘每個節點持有乙個字元 葉子節點持有資料,且持有的字元為 0 level 0 root a level 1 m level 2 y level 3 0 56 level 4新...

trie樹(字典樹)

1.trie樹,又名字典樹,顧名思義,它是可以用來作字串查詢的資料結構,它的查詢效率比雜湊表還要高。trie樹的建樹 比如有字串 ab adb adc 可以建立字典樹如圖 樹的根節點head不儲存資訊,它有26個next指標,分別對應著字元a,b,c等。插入字串ab時,next a a 即next ...