字典树(Trie)

参考:字典树(Trie)详解 - Seaway-Fu - 博客园

1. 定义

字典树,顾名思义,是关于“字典”的一棵树。即:它是对于字典的一种存储方式(所以是一种数据结构而不是算法)。这个词典中的每个“单词”就是从根节点出发一直到某一个目标节点的路径,路径中每条边的字母连起来就是一个单词。可以发现:字典树的本质是把很多字符串拆成单个字符的形式,以树的方式存储起来。

2. 常见应用

  • 1、维护字符串集合(即字典)。

  • 2、向字符串集合中插入字符串(即建树)。

  • 3、查询字符串集合中是否有某个字符串(即查询)。

  • 4、统计字符串在集合中出现的个数(即统计)。

  • 5、将字符串集合按字典序排序(即字典序排序)。

  • 6、求集合内两个字符串的LCP(Longest Common Prefix,最长公共前缀)(即求最长公共前缀)。

3. 基本操作及代码(Python)

字典树的两种基本操作分别是建树和查询。其中建树操作就是把一个新单词插入到字典树里。查询操作就是查询给定单词是否在字典树上。

代码实现如下:

class Trie:
    def __init__(self):
        """
        初始化字典树根
        """
        self.root = {}
        self.word_end = -1
        
    def insert(self, word):
        """
        插入单词
        """
        curNode = self.root
        for c in word:
            if not c in curNode:
                curNode[c] = {}
            curNode = curNode[c]
        curNode[self.word_end] = True
        
    def search(self, word):
        """
        查找单词
        """
        curNode = self.root
        for c in word:
            if not c in curNode:
                return False
            curNode = curNode[c]
        if not self.word_end in curNode:
            return False
        return True

你可能感兴趣的:(数据结构)