關於python實現trie樹的信息

本文目錄一覽:

python中用字典寫出樹形數據結構並在控制台中列印樹形數據結構

#!/usr/bin/python3

# -*- coding: utf-8 -*-

def print_tree(tree):

    buff = [‘ROOT/’]

    _print_tree(tree, buff, ”, 0)

    print(‘\n’.join(buff))

def _print_tree(tree, buff, prefix, level):

    count = len(tree)

    for k, v in tree.items():

        count -= 1

        if v:

            buff.append(‘%s +- %s/’ % (prefix, k))

            if count  0:

                _print_tree(v, buff, prefix + ‘ |  ‘, level + 1)

            else:

                _print_tree(v, buff, prefix + ‘    ‘, level + 1)

        else:

            buff.append(‘%s +- %s’ % (prefix, k))

def test():

    tree = {

        ‘bin’: { ‘bash’: None, ‘cat’: None, ‘cp’: None, },

        ‘etc’: {

            ‘init.d’: { ‘apache2’:None, ‘slapd’:None, ‘sshd’:None, },

            ‘passwd’: None,

            ‘hosts’: None,

        },

        ‘var’: {

            ‘log’: {

                ‘apache2’: { ‘accesslog’:None, ‘errorlog’: None, },

            },

        },

    }

    print_tree(tree)

if __name__ == ‘__main__’:

    test()

輸出結果:

ROOT/

 +- etc/

 |   +- passwd

 |   +- init.d/

 |   |   +- apache2

 |   |   +- sshd

 |   |   +- slapd

 |   +- hosts

 +- bin/

 |   +- cp

 |   +- bash

 |   +- cat

 +- var/

     +- log/

         +- apache2/

             +- errorlog

             +- accesslog

傻傻分不清嗎?——Trie Tree,字典樹、前綴樹概述

Trie樹,又叫字典樹、前綴樹(Prefix Tree)、單詞查找樹 或 鍵樹,是一種多叉樹結構。

上圖是一棵Trie樹,表示了關鍵字集合{「a」, 「to」, 「tea」, 「ted」, 「ten」, 「i」, 「in」, 「inn」} 。

從上圖可以歸納出Trie樹的基本性質:

實際場景中,每個中間節點,會設置「 一個標記 」,用於標識 當前節點 是否 構成一個單詞 ( 關鍵詞 )。

字典樹,作為數據結構,有什麼用?本質是:查詢效率,或者說「時間複雜度」。

Trie樹:

優點 :

缺點 :

具體的應用場景:

怎麼是用python 語言 使用結巴分詞 呢

Python代碼

#encoding=utf-8  

import jieba  

  

seg_list = jieba.cut(“我來到北京清華大學”,cut_all=True)  

print “Full Mode:”, “/ “.join(seg_list) #全模式  

  

seg_list = jieba.cut(“我來到北京清華大學”,cut_all=False)  

print “Default Mode:”, “/ “.join(seg_list) #默認模式  

  

seg_list = jieba.cut(“他來到了網易杭研大廈”)  

print “, “.join(seg_list)

輸出: 

Full Mode: 我/ 來/ 來到/ 到/ 北/ 北京/ 京/ 清/ 清華/ 清華大學/ 華/ 華大/ 大/ 大學/ 學  

  

Default Mode: 我/ 來到/ 北京/ 清華大學  

  

他, 來到, 了, 網易, 杭研, 大廈    (此處,「杭研」並沒有在詞典中,但是也被Viterbi演算法識別出來了)

python字典怎麼表現二叉樹

用python構造一個n層的完全二叉樹的代碼如下: typedef struct {int weight;int parent, lchild, rchild; } HTNode ,*HuffmanTree; // 動態分配數組存儲huffman樹 演算法設計void createHuffmantree(){ ht=(HuffmanTree)malloc(m+1)*sizeof(HTNode.

Python字典的底層實現

字典是一種可變、無序容器數據結構。元素以鍵值對存在,鍵值唯一。它的特點搜索速度很快:數據量增加10000倍,搜索時間增加不到2倍;當數據量很大的時候,字典的搜索速度要比列錶快成百上千倍。

在Python中,字典是通過散列表(哈希表)實現的。字典也叫哈希數組或關聯數組,所以其本質是數組(如下圖),每個 bucket 有兩部分:一個是鍵對象的引用,一個是值對象的引用。所有 bucket 結構和大小一致,我們可以通過偏移量來讀取指定 bucket。

定義一個字典 dic = {},假設其哈希數組長度為8。

Python會根據哈希數組的擁擠程度對其擴容。「擴容」指的是:創造更大的數組,這時候會對已經存在的鍵值對重新進行哈希取余運算保存到其它位置;一般接近 2/3 時,數組就會擴容。擴容後,偏移量的數字個數增加,如數組長度擴容到16時,可以用最右邊4位數字作為偏移量。

計算鍵對象 name 的哈希值,然後比較哈希數組對應索引內的bucket是否為空,為空返回 None ,否則計算這個bucket的鍵對象的哈希值,然後與 name 哈希值比較,相等則返回 值對象 ,否則繼續左移計算哈希值。

注意:

1.鍵必須為可哈希的,如數字、元組、字元串;自定義對象需要滿足支持hash、支持通過 __eq__() 方法檢測相等性、若 a == b 為真,則 hash(a) == hash(b) 也為真。

2.字典的內存開銷很大,以空間換時間。

3.鍵查詢速度很快,列表查詢是按順序一個個遍歷,字典則是一步到位。

4.往字典裡面添加新鍵可能導致擴容,導致哈希數組中鍵的次序變化。因此,不要在遍歷字典的同時進行字典的修改。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/196001.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-03 09:52
下一篇 2024-12-03 09:52

相關推薦

  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智慧、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • 蝴蝶優化演算法Python版

    蝴蝶優化演算法是一種基於仿生學的優化演算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化演算法Python版…

    編程 2025-04-29

發表回復

登錄後才能評論