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

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

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

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

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

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

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

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

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

#coding=utf-8 
class Trie: 
  root = {} 
  END = '/' 
  def add(self, word): 
    #從根節(jié)點(diǎn)遍歷單詞,char by char,如果不存在則新增,最后加上一個單詞結(jié)束標(biāo)志 
    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遞歸算法,包含無限遞歸,正常遞歸,階乘等,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-02-02
  • Python中pickle模塊的使用詳解

    Python中pickle模塊的使用詳解

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

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

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

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

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

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

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

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

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

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

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

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

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

    pycharm如何添加解釋器

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

    Python中*args和**kwargs的作用

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

最新評論

旬阳县| 长寿区| 连城县| 武山县| 东兴市| 客服| 凌源市| 福鼎市| 宾川县| 信阳市| 彭阳县| 栾城县| 宁陵县| 南陵县| 兴化市| 锡林浩特市| 唐海县| 报价| 青海省| 防城港市| 安顺市| 桂东县| 乾安县| 无棣县| 长海县| 定日县| 汶川县| 平阳县| 都兰县| 许昌市| 曲沃县| 黑水县| 奉化市| 离岛区| 太白县| 宜黄县| 澄城县| 五常市| 灵山县| 同德县| 七台河市|