关于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/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

发表回复

登录后才能评论