字典树原理详解及其Python实现

一、原理详解

1、初步介绍:
字典树又名前缀树,Trie树,是一种存储大量字符串的树形数据结构,经常被搜索引擎系统用于文本词频统计。
除此之外也常用于计算左右信息熵、计算点互信息。

下图演示了一个保存了8个单词的字典树的结构,8个单词分别是:“A”, “to”, “tea”, “ted”, “ten”, “i”, “in”, “inn”。

在这里插入图片描述
2、优势:
利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率高。
相比于HashMap存储,在存储单词(和语种无关,任意语言都可以)的场景上,节省了大量的内存空间。

3、基本性质:
(1)、根节点不包含字符,除根节点外每一个节点都只包含一个字符;
(2)、从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串;
(3)、每个节点的所有子节点包含的字符都不相同。

二、python实现

1、创建字典树的节点

class TrieNode:
    def __init__(self):
        self.nodes = dict()  # 构建字典
        self.is_leaf = False

2、实现插入操作

def insert(self, word: str): 
        curr = self
        for char in word:
            if char not in curr.nodes:
                curr.nodes[char] = TrieNode()
            curr = curr.nodes[char]
        curr.is_leaf = True

3、实现查找操作

def search(self, word: str):
        curr = self
        for char in word:
            if char not in curr.nodes:
                return False
            curr = curr.nodes[char]
        return curr.is_leaf

4、完整代码:
完整代码参考自:https://blog.csdn.net/danengbinggan33/article/details/82151220

# -*- coding:utf-8 -*-
"""
Description:大变双向字典树
迭代次数默认最大999,可以增加但是没必要。其实能深到999层,那这个序列还是选择另外的处理方式吧。

@author: WangLeAi
@date: 2018/8/15
"""


class TrieNode(object):
    def __init__(self, value=None, count=0, parent=None):
        # 值
        self.value 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值