Trie樹(字典樹)

2022-09-19 14:27:08 字數 1326 閱讀 2168

看以下幾個題:

1、給出n個單詞和m個詢問,每次詢問乙個單詞,回答這個單詞是否在單詞表**現過。

答:簡單!map,短小精悍。

2、給出n個單詞和m個詢問,每次詢問乙個字首,回答詢問是多少個單詞的字首。

答:map,把每個單詞拆開。

judge:n<=200000,tle!

這就需要一種高階資料結構——trie樹(字典樹)

單詞查詢樹,trie樹,是一種樹形結構,是一種雜湊樹的變種。

優點

利用字串的公共字首來節約儲存空間,最大限度地減少無謂的字串比較,查詢效率比雜湊表高。

trie的資料結構定義:

以小寫字母字典樹為例

#define max 26 //根據需要變化};

typedef struct trie   

else

}p->v = -1; //若為結尾,則將v改成-1表示

}

以查詢乙個字首是否出現過為例

思路

從左往右以此掃瞄每個字母,順著字典樹往下找,能找到這個字母,往下走,否則結束查詢,即沒有這個字首;字首掃完了,表示有這個字首。

**

int search(char *str)

return -1; //此串是字符集中某串的字首

}

字典樹

模板題

#include #include #include using namespace std;

struct ooo

dd[505555];

int top,n,m;

char a[20],b[20];

int creat() //分配新的節點

int xiab(char c)

void insert(int root,char *s) //將s插入到字典樹中

cin>>m;

for(i=1;i<=m;i++)

memset(flag,0,sizeof(flag));

memset(a,0,sizeof(a));

memset(col,0,sizeof(col));

k=0;//初始化。

}return 0;

}

原文

Trie樹(字典樹)

trie樹的核心思想是用空間換時間,通過在樹中儲存字串的公共字首,來達到加速檢索的目的。例如,對於一棵儲存由英文本母組成的字串的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新...