字典樹演算法

2021-09-09 09:10:43 字數 2260 閱讀 7266

trie字典樹主要用於儲存字串,trie 的每個 node 儲存乙個字元。用鍊錶來描述的話,就是乙個字串就是乙個鍊錶。每個node都儲存了它的所有子節點。字典樹顧名思義是乙個樹形結構,它的建立和二叉樹類似。它可以實現字首搜尋。

trie 樹利用字串的公共字首,逐層建立起一棵多叉樹。在檢索時類似於在字典中查單詞,從第乙個字元開始遍歷,在 trie 樹中一層一層往下查詢,查詢效率可以達到 o(n),n 為查詢字串的長度。1.trie 樹的根結點上不儲存字元,其餘結點上存且只存乙個字元。

2.從根結點出發,到某一結點上經過的字元,即是該結點對應的字首。每個結點的孩子結點儲存的字元各不相同。

3.trie 樹犧牲空間來換取時間,當資料量很大時,會占用很大空間。如果字串均由小寫字母組成,則每個結點最多會有 2626 個孩子結點,則最多會有 26n26n 個用於儲存的結點,nn 為字串的最大長度。(實際上這個可以優化)

4.trie 樹常用於字串的快速檢索,字串的快速排序與去重,文字的詞頻統計等。

因為我們要查詢公共字首的所有單詞,因此在這裡加入isstr資料域用於判斷是否構成完整單詞

//字典樹 

typedef struct tire_node tire;

//相當於建立帶頭節點的樹 

tire *inittire()

return root;

}

void tireinsert(tire **root, char *word) 

node->children[id]->count = 0;

node->children[id]->isstr = false;

} node = node->children[id];

node->count++;

i++;

} node->isstr = true;

strcpy(node->word,word);

}

插入的時候咱們這裡預設按照字元從小到大的順序插入,因此所建立的樹如果按照層次遍歷的話是乙個遞增序列
//根據單詞字首查詢字首所在的節點位置 

tire * tiresearch(tire *root, char *word)

//如果沒找到,返回空節點

else

}return node;

}

在這裡用到了bfs的思想
//bfs遍歷列印出滿足字首的圖書資訊

void printtire(tire *root,char *front)

else

//將當前節點的孩子都加入佇列

for (i = 0; i < maxsize; i++)

}} }

}

#include#define maxsize 50 

using namespace std;

//字典樹

typedef struct tire_node tire;

//相當於建立帶頭節點的樹

tire *inittire()

return root;

}void tireinsert(tire **root, char *word)

node->children[id]->count = 0;

node->children[id]->isstr = false;

} node = node->children[id];

node->count++;

i++;

} node->isstr = true;

strcpy(node->word,word);

}//根據單詞字首查詢字首所在的節點位置

tire * tiresearch(tire *root, char *word)

//如果沒找到,返回空節點

else

}return node;

}//bfs遍歷列印出滿足字首的圖書資訊

void printtire(tire *root,char *front)

else

//將當前節點的孩子都加入佇列

for (i = 0; i < maxsize; i++)

}} }

}int main()

演算法 字典樹

trie樹就是字典樹,其核心思想就是空間換時間。字尾樹 suffix tree 字典樹作用 1 查詢單詞是否出現 2 查詢單詞第一次出現位置 在最後乙個字母節點標記第一次出現位置 3 查詢包含前序的單詞個數 每新增乙個單詞進樹,所經過的節點的計數器加一 4 將所有單詞按字母次序輸出 舉個簡單的例子。...

演算法之字典樹

字典樹以字首訪問資料,就像檔案系統一樣,從根出發,只要知道某段資料的字首,就能找到相應的資料。同時,當存入新資料時,需建立新節點,然後將新資料依次插入對應字段。本例中字典樹以英文小寫字母的基礎資料。struct node node child 26 bool flag insert s,trie n...

trie樹 字典樹 DFA演算法

service public class sensitivewordutil extends timertask return else string strs keyword.split setkeywordset new hashset for string str strs sensitive...