Trie 樹學習下

2021-06-18 04:19:15 字數 1251 閱讀 1943

今天把trie樹徹底的看了下。發現網上有兩篇非常好的文章,通過他們的部落格,我對trie樹有了大題的了解。並且通過理解 消化 綜合他們的知識,再結合我自己的程式設計愛好,我也把具體的程式實現了一遍,這樣能對trie樹有更加深刻的認識!

他們是:勇幸|thinking

和 maik 。 感謝他們。 下面的分析也是從他們的部落格摘抄以便理解的。

trie的核心思想是空間換時間。利用字串的公共字首來降低查詢時間的開銷以達到提高效率的目的。

好多人說trie的根節點不包含任何字元資訊,我所習慣的trie根節點卻是包含資訊的,而且認為這樣也方便,下面說一下它的性質

1.    字元的種數決定每個節點的出度,即branch陣列(空間換時間思想)

2.    branch陣列的下標代表字元相對於a的相對位置

3.    採用標記的方法確定是否為字串。

4.    插入、查詢的複雜度均為o(len),len為字串長度

其基本操作有:查詢 插入和刪除(刪除全部和刪除單個單詞)

搜尋字典專案的方法為:

(1) 從根結點開始一次搜尋;

(4) 迭代過程……

如圖所示,該trie樹存有abc、d、da、dda四個字串,如果是字串會在節點的尾部進行標記。沒有後續字元的branch分支指向null

已知n個由小寫字母構成的平均長度為10的單詞,判斷其中是否存在某個串為另乙個串的字首子串。下面對比3種方法:

1.    最容易想到的:即從字串集中從頭往後搜,看每個字串是否為字串集中某個字串的字首,複雜度為o(n^2)。

2.    使用hash:我們用hash存下所有字串的所有的字首子串。建立存有子串hash的複雜度為o(n*len)。查詢的複雜度為o(n)* o(1)= o(n)。

3.    使用trie:因為當查詢如字串abc是否為某個字串的字首時,顯然以b,c,d....等不是以a開頭的字串就不用查詢了。所以建立trie的複雜度為o(n*len),而建立+查詢在trie中是可以同時執行的,建立的過程也就可以成為查詢的過程,hash就不能實現這個功能。所以總的複雜度為o(n*len),實際查詢的複雜度只是o(len)。

trie樹是一種非常重要的資料結構,它在資訊檢索,字串匹配等領域有廣泛的應用,同時,它也是很多演算法和複雜資料結構的基礎,如字尾樹,ac自動機等,因此,掌握trie樹這種資料結構,對於一名it人員,顯得非常基礎且必要!(摘抄自:

Trie樹的學習

所寫內容,是對自己所學知識的乙個記錄罷了。1.簡介 最近在做中國人名識別的時候,看到一篇文章是基於角色的人名識別,而角色字典中有2個角色是用雙陣列tire樹來建立的,當時沒有看懂,於是來先學習trie樹。trie樹,又稱字典樹,單詞查詢樹或者字首樹等,是一種快速 檢索的多叉樹結構。比如,英文本母的字...

Trie 樹學習筆記

trie 樹是一種能夠高效的儲存和使用字串集合的一種東西。它的作用跟 texttt 十分相似,都是用來儲存字串集合的利器,但是,trie 樹卻比 texttt 的時間複雜度更加優秀。詳情見時空複雜度分析。trie 樹究竟是什麼東西呢?讓我們通過儲存乙個字串集合來直觀的了解它。已知我們要儲存這樣的字串...

Trie 字典樹 的學習

trie樹,即字典樹,又稱單詞查詢樹或鍵樹,是一種樹形結構,是一種雜湊樹的變種。典型應用是用於統計和排序大量的字串 但不僅限於字串 所以經常被搜尋引擎系統用於文字詞頻統計。它的優點是 最大限度地減少無謂的字串比較,查詢效率比雜湊表高。trie的核心思想是空間換時間。利用字串的公共字首來降低查詢時間的...