1. 程式人生 > >字典樹(trie樹)

字典樹(trie樹)

1. 字串檢索,詞頻統計,搜尋引擎的熱門查詢

        事先將已知的一些字串(字典)的有關資訊儲存到trie樹裡,查詢另外一些未知字串是否出現過或者出現頻率。

        舉例:

       1)有一個1G大小的一個檔案,裡面每一行是一個詞,詞的大小不超過16位元組,記憶體限制大小是1M。返回頻數最高的100個詞。

       2)給出N 個單片語成的熟詞表,以及一篇全用小寫英文書寫的文章,請你按最早出現的順序寫出所有不在熟詞表中的生詞。

       3)給出一個詞典,其中的單詞為不良單詞。單詞均為小寫字母。再給出一段文字,文字的每一行也由小寫字母構成。判斷文字中是否含有任何不良單詞。例如,若rob是不良單詞,那麼文字problem含有不良單詞。

       4)1000萬字符串,其中有些是重複的,需要把重複的全部去掉,保留沒有重複的字串

       5)尋找熱門查詢搜尋引擎會通過日誌檔案把使用者每次檢索使用的所有檢索串都記錄下來,每個查詢串的長度為1-255位元組。假設目前有一千萬個記錄,這些查詢串的重複讀比較高,雖然總數是1千萬,但是如果去除重複和,不超過3百萬個。一個查詢串的重複度越高,說明查詢它的使用者越多,也就越熱門。請你統計最熱門的10個查詢串,要求使用的記憶體不能超過1G。

2. 字串最長公共字首

       Trie樹利用多個字串的公共字首來節省儲存空間,反之,當我們把大量字串儲存到一棵trie樹上時,我們可以快速得到某些字串的公共字首。舉例:

      1) 給出N 個小寫英文字母串,以及Q 個詢問,即詢問某兩個串的最長公共字首的長度是多少.  解決方案:

        首先對所有的串建立其對應的字母樹。此時發現,對於兩個串的最長公共字首的長度即它們所在結點的公共祖先個數,於是,問題就轉化為了離線  (Offline)的最近公共祖先(Least Common Ancestor,簡稱LCA)問題。

       而最近公共祖先問題同樣是一個經典問題,可以用下面幾種方法:

        1. 利用並查集(Disjoint Set),可以採用採用經典的Tarjan 演算法

        2. 求出字母樹的尤拉序列(Euler Sequence )後,就可以轉為經典的最小值查詢(Range Minimum Query,簡稱RMQ)問題了;

3.  排序

       Trie樹是一棵多叉樹,只要先序遍歷整棵樹,輸出相應的字串便是按字典序排序的結果。

        舉例: 給你N 個互不相同的僅由一個單詞構成的英文名,讓你將它們按字典序從小到大排序輸出。

4 作為其他資料結構和演算法的輔助結構

       如字尾樹,AC自動機等。

相關推薦

字典Trie

bool cnblogs 博客 記錄 com strlen www dto fin 摘自大佬博客 https://www.cnblogs.com/TheRoadToTheGold/p/6290732.html 給出n個單詞和m個詢問1.查詢某個前綴是否出現過2.查

字典(trie)

1. 字串檢索,詞頻統計,搜尋引擎的熱門查詢         事先將已知的一些字串(字典)的有關資訊儲存到trie樹裡,查詢另外一些未知字串是否出現過或者出現頻率。         舉例:        1)有一個1G大小的一個檔案,裡面每一行是一個詞,詞的大小不超過16位元組,記憶體限制大小是1M。

字典Trie詳解及其應用

一、知識簡介         最近在看字串演算法了,其中字典樹、AC自動機和字尾樹的應用是最廣泛的了,下面將會重點介紹下這幾個演算法的應用。       字典樹(Trie)可以儲存一些字串->值的對應關係。基本上,它跟 Java 的 HashMap 功能相同,都是 k

二叉--trie

閒來無事,寫寫部落格,總結一下trie樹; 演算法原理 首先,讓我們對trie樹來一個比較直觀的認識,下面的這個例子,大家應該都能夠理解。 下面我們有and,as,at,cn,com這些關鍵詞,那麼如何構建trie樹呢? 在上面這個棵樹中,樹的

Trie字典)(1)

stdio.h public ctu 哈希 pac 索引 cas proc ren   Trie樹。又稱字典樹,單詞查找樹或者前綴樹,是一種用於高速檢索的多叉樹結構。   Trie樹與二叉搜索樹不同,鍵不是直接保存在節點中,而是由節點在樹中的位置決定。

trie字典

arc delete png 技術分享 我只 blog 存在 紅色 style 核心思想: 利用字符串的公共前綴來降低查詢時間的開銷以達到提高效率的目的 舉個例子 上圖是由 am as tea too tooth two 構成的字典樹。每個節

【數據結構】前綴/字典/Trie

splay 多個 結果 順序 using node 提示 額外 join 【前綴樹】   用來保存一個映射(通常情況下 key 為字符串 value 為字符串所代表的信息)   例如:一個單詞集合 words = { apple, cat, water } 其中

HDU - 1251 統計難題 【字典Trie

init nan fail printf pos 小寫 out esp spa Ignatius最近遇到一個難題,老師交給他很多單詞(只有小寫字母組成,不會有重復的單詞出現),現在老師要他統計出以某個字符串為前綴的單詞數量(單詞本身也是自己的前綴). Input輸入數據

hiho 第2周 Trie字典

oid syn one ++ tac col splay str gif 裸字典樹。AC自動機前綴技能 1 #include <set> 2 #include <map> 3 #include <queue> 4

字典(Trie)

用Trie(也叫字首樹)來儲存字串集合。 每個單詞的結束位置對應一個“單詞結點”。反過來,從根節點到每個單詞結點的路徑上所有字母連線而成的字串就是該結點對應的字串,在程式上,將根節點編號成0,然後把其餘結點編號為從1開始的正整數,然後用一個數組來儲存每個結點的所有子節點,用下標直接存取。 具

Immediate Decodability UVA - 644 (字典trie)

傳送門 題意:給出一組由0或1組成的字串,組與組之間用9分隔開,然後判斷如果這個組之間有字首,那麼輸出not,否則輸出is 題解:使用字典樹,建樹直接就可以判斷,分為兩種情況,第一種情況就是字首在前面出現,直接判斷val[u]是否存在,第二種情況是字首在後面出現,那麼就在建樹的過程中看是否出

Remember the Word UVALive - 3942(字典trie)

傳送門 題意:這個題是先給出一個長的字串,然後相應給出若干個單詞,問這個字串能由後面給出的若干個單詞構成的方案數,比如給出abcd,給出的若干個單詞是a,b,ab,cd,這樣就有兩種構成方法了 題解:最最重要的是得要想出遞推得出答案,用d[i]表示從給出的字串中的第i位開始的字尾所能構成的方

字典(Trie)的學習筆記

按照一本通往下學,學到吐血了。。。 例題1 字典樹模板題嗎。 先講講字典樹: 給出程式碼(太簡單了。。。)! #include<cstdio> #include<cstring> using namespace std; struct trie { int

字典 trie

具體原理:劉汝佳《演算法競賽入門經典訓練指南》P208 作用:字典樹又叫單詞查詢樹(Trie)或字首樹,是一個實現字串。你可以在O(m)(m為所給單詞的長度)時間內判斷出該單詞是否屬於字典。 程式碼模板:   struct Trie { int ch[maxnode

【模板】Trie字典,單詞查詢

int n; // 0為根節點 char a[MAX_N]; // a[0] = 0; int p[MAX_N][26]; void Update(string s) { int now = 0, len = s.size(); for(register int i = 0; i < l

字首( 又名:TRIE、單詞查詢字典) 和 字尾(Suffix)

概念 字首樹:將海量字串儲存在一棵樹中。 字尾樹:將一個字串分解成一棵樹。 字首樹 節點的結構體: struct trieNode { bool isEnd;//是否可以作為字串的終結節點 trieNode *child[26]; } 字首樹:

字典Trie)模板 陣列表示 + 連結串列表示

 陣列模擬,缺點是並不知道要開多大,可能會出現陣列開小導致wrong answer。 對應題目:hdu 1251  #include <iostream> #include <cstdio> #include <cstring> #de

Trie字典):應用於統計和排序

轉載這篇關於字典樹的原因是看到騰訊面試相關的題:就是在海量資料中找出某一個數,比如2億QQ號中查找出某一個特定的QQ號。。 有人提到字典樹,我就順便了解下字典樹。 [轉自:http://blog.csdn.net/oncealong/article/details

java字典(Trie)實現中文模糊匹配

原理解釋: java實現:https://blog.csdn.net/yuhk231/article/details/51539840 c實現:https://blog.csdn.net/qq_31175231/article/details/77827324 程式碼模板:缺點,只能檢索

資料結構——Trie 字典 字首

一、什麼是Trie Trie不同於二分搜尋樹、堆、線段樹等二叉樹結構,Trie是一個多叉樹。使用場景:通訊錄高效搜尋,專為處理字串設計的。 比如字典中有n條資料,如果使用樹結構,查詢的時間複雜度是O(logn),如果有100萬條資料的話,logn大約是20,如果有1億