最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解字典樹Trie結(jié)構(gòu)及其Python代碼實現(xiàn)

 更新時間:2016年06月03日 16:48:41   作者:hackbuteer1  
Trie多被用來查找和統(tǒng)計字符串,利用公共前綴來減少搜索時間,下面我們就來詳解字典樹Trie結(jié)構(gòu)及其Python代碼實現(xiàn)

字典樹(Trie)可以保存一些字符串->值的對應(yīng)關(guān)系?;旧希?Java 的 HashMap 功能相同,都是 key-value 映射,只不過 Trie 的 key 只能是字符串。
Trie 的強大之處就在于它的時間復(fù)雜度。它的插入和查詢時間復(fù)雜度都為 O(k) ,其中 k 為 key 的長度,與 Trie 中保存了多少個元素?zé)o關(guān)。Hash 表號稱是 O(1) 的,但在計算 hash 的時候就肯定會是 O(k) ,而且還有碰撞之類的問題;Trie 的缺點是空間消耗很高。
至于Trie樹的實現(xiàn),可以用數(shù)組,也可以用指針動態(tài)分配,我做題時為了方便就用了數(shù)組,靜態(tài)分配空間。
Trie樹,又稱單詞查找樹或鍵樹,是一種樹形結(jié)構(gòu),是一種哈希樹的變種。典型應(yīng)用是用于統(tǒng)計和排序大量的字符串(但不僅限于字符串),所以經(jīng)常被搜索引擎系統(tǒng)用于文本詞頻統(tǒng)計。它的優(yōu)點是:最大限度地減少無謂的字符串比較,查詢效率比哈希表高。
Trie的核心思想是空間換時間。利用字符串的公共前綴來降低查詢時間的開銷以達到提高效率的目的。
Trie樹中每個單詞都是通過character by character方法進行存儲,相同前綴單詞共享前綴節(jié)點.
可以看到,每條路徑組成一個單詞.上面這顆樹存了to/tea/ted/ten/inn這些詞.

Trie樹的基本性質(zhì)可以歸納為:
(1)根節(jié)點不包含字符,除根節(jié)點意外每個節(jié)點只包含一個字符。
(2)從根節(jié)點到某一個節(jié)點,路徑上經(jīng)過的字符連接起來,為該節(jié)點對應(yīng)的字符串。
(3)每個節(jié)點的所有子節(jié)點包含的字符串不相同。

性質(zhì)
(1)根節(jié)點不包含字符,除根節(jié)點外的每個節(jié)點只包含一個字符。
(2)從根節(jié)點到某一個節(jié)點,路徑上經(jīng)過的字符連接起來,為該節(jié)點對應(yīng)的字符串。
(3)每個節(jié)點的所有子節(jié)點包含的字符串不相同。

基本思想(以字母樹為例):
1、插入過程
對于一個單詞,從根開始,沿著單詞的各個字母所對應(yīng)的樹中的節(jié)點分支向下走,直到單詞遍歷完,將最后的節(jié)點標記為紅色,表示該單詞已插入Trie樹。
2、查詢過程
同樣的,從根開始按照單詞的字母順序向下遍歷trie樹,一旦發(fā)現(xiàn)某個節(jié)點標記不存在或者單詞遍歷完成而最后的節(jié)點未標記為紅色,則表示該單詞不存在,若最后的節(jié)點標記為紅色,表示該單詞存在。

應(yīng)用
(1)詞頻統(tǒng)計
比直接用hash節(jié)省空間
(2)搜索提示
輸入前綴的時候提示可以構(gòu)成的詞
(3)作為輔助結(jié)構(gòu)
如后綴樹,AC自動機等的輔助結(jié)構(gòu)

實現(xiàn)
雖然Python沒有指針,但是可以用嵌套字典來實現(xiàn)樹結(jié)構(gòu).對于非ascii的單詞,統(tǒng)一用unicode編碼來插入與搜索.

#coding=utf-8 
class Trie: 
  root = {} 
  END = '/' 
  def add(self, word): 
    #從根節(jié)點遍歷單詞,char by char,如果不存在則新增,最后加上一個單詞結(jié)束標志 
    node = self.root 
    for c in word: 
      node=node.setdefault(c,{}) 
    node[self.END] = None 
 
  def find(self, word): 
    node = self.root 
    for c in word: 
      if c not in node: 
        return False 
      node = node[c] 
    return self.END in node 

相關(guān)文章

  • python遞歸算法(無限遞歸,正常遞歸,階乘)

    python遞歸算法(無限遞歸,正常遞歸,階乘)

    本文主要介紹了python遞歸算法,包含無限遞歸,正常遞歸,階乘等,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-02-02
  • Python中pickle模塊的使用詳解

    Python中pickle模塊的使用詳解

    這篇文章主要介紹了Python中pickle模塊的使用詳解,python的pickle模塊提供了一個簡答的持久化功能,可以將對象以文件的形式存放在磁盤上,pickle模塊實現(xiàn)了基本的數(shù)據(jù)序列化和反序列化,需要的朋友可以參考下
    2023-08-08
  • 如何用python抓取B站數(shù)據(jù)

    如何用python抓取B站數(shù)據(jù)

    今天介紹一個獲取B站數(shù)據(jù)的Python擴展庫-bilibili_api,對此感興趣的同學(xué),可以實驗一下
    2021-05-05
  • Python 實現(xiàn)網(wǎng)課實時監(jiān)控自動簽到、打卡功能

    Python 實現(xiàn)網(wǎng)課實時監(jiān)控自動簽到、打卡功能

    這篇文章主要介紹了Python實現(xiàn)網(wǎng)課實時監(jiān)控自動簽到,打卡功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • Python3讀取和寫入excel表格數(shù)據(jù)的示例代碼

    Python3讀取和寫入excel表格數(shù)據(jù)的示例代碼

    這篇文章主要介紹了Python3讀取和寫入excel表格數(shù)據(jù)的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Python實現(xiàn)PS濾鏡碎片特效功能示例

    Python實現(xiàn)PS濾鏡碎片特效功能示例

    這篇文章主要介紹了Python實現(xiàn)PS濾鏡碎片特效功能,結(jié)合實例形式分析了Python實現(xiàn)PS濾鏡碎片效果的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2018-01-01
  • django 創(chuàng)建過濾器的實例詳解

    django 創(chuàng)建過濾器的實例詳解

    這篇文章主要介紹了django 創(chuàng)建過濾器的實例詳解的相關(guān)資料,主要說明django 創(chuàng)建過濾器來統(tǒng)一處理字符串,需要的朋友可以參考下
    2017-08-08
  • python+django+sql學(xué)生信息管理后臺開發(fā)

    python+django+sql學(xué)生信息管理后臺開發(fā)

    這篇文章主要為大家詳細介紹了python+django+sql學(xué)生信息管理后臺開發(fā),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • pycharm如何添加解釋器

    pycharm如何添加解釋器

    這篇文章主要介紹了pycharm如何添加解釋器問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Python中*args和**kwargs的作用

    Python中*args和**kwargs的作用

    *args和**kwargs,以及單獨的*,**到底是啥作用呢?原理是啥呢?讀完這篇文章你就徹底明白了,感興趣的朋友跟隨小編一起看看吧
    2023-11-11

最新評論

寻甸| 大冶市| 青浦区| 饶平县| 昔阳县| 香格里拉县| 波密县| 江永县| 西峡县| 柳河县| 云阳县| 小金县| 墨竹工卡县| 准格尔旗| 中方县| 汉中市| 平塘县| 肥东县| 平安县| 辛集市| 台北市| 鸡东县| 湖州市| 云南省| 宜宾市| 香河县| 庆阳市| 清河县| 佛学| 扎兰屯市| 阳信县| 肃宁县| 炎陵县| 宝应县| 灵丘县| 渝中区| 来宾市| 绥阳县| 中山市| 绍兴县| 北碚区|