Trie 树

作者: 币来币往 | 来源:发表于2018-12-18 22:37 被阅读0次

Trie树,也叫字典树,它是一种专门处理字符串匹配的数据结构,用来解决在一组字符串集合中快速查找某个字符串的问题。
Trie树的核心思想就是,将几个字符串的公共前缀合并在一起。
例如 how, hi, hello, her, so, see几个单词构成的trie树如下:

image.png
其中,跟节点不包含任何信息,每个节点包含字符串中的一个字符,红色节点表示是一个单词的结尾。
当我们要查找一个字符串时,从根节点依次往下匹配即可,例如查找单词her,我们先匹配h,然后接着找到e,再往下找到r; 如果我们那he去匹配呢,此时匹配结束的终点e不是红色,表示不是一个单词,它只是某个单词的一部分,所以匹配失败。

Trie树的存储

这里我们假设单词都是由26个小写字母构成,这样我们就可以用下面的结构来存储trieNode。它的子节点指针存储在对应的数组元素中,如a存储在第0个下标,z存储在第25个下标内。

class TrieNode{
    char data;
    TrieNode[] children = new TrieNode[26];
}

public class Trie {
    private TrieNode root = new TrieNode('/');

    public void insert(char[] text){
        if(text == null || text.length == 0) return;
        TrieNode p = root;
        for(int i = 0; i < text.length; i++){
            TrieNode newNode = new TrieNode(text[i]);

            if(p.children[text[i] - 'a'] == null){
                p.children[text[i] - 'a'] = newNode;
            }
            p = p.children[text[i] - 'a'];
        }
        p.isEndingChar = true;
    }

    public boolean find(char[] text){
        TrieNode p = root;
        for(int i = 0; i < text.length; i++){
            int index = text[i] - 'a';
            if(p.children[index] == null){
                return false;
            }
            p = p.children[index];
        }
        return p.isEndingChar;
    }
}

上面是一个trie树的实现,通过观察我们发现,它其实是很耗内存的,因为每个节点都有一个长度为26的数组,如果我们再考虑上大写字母,数组等符合,将会需要一个更大的数组。
所以Trie树其实并不被用来做精确匹配,而是常被用来做查找前缀匹配的字符串,其中最常用的一个功能就是搜索关键词的提升功能。


image.png

相关文章

  • trie树

    文章内容来自 Trie树:应用于统计和排序Trie树 trie树又称:字典树、单词查找树、前缀树等,总之是一种树状...

  • 树结构之Trie

    1. 什么是trie树 1.Trie树 (特例结构树)Trie树,又称单词查找树、字典树,是一种树形结构,是一种哈...

  • 实现 Trie

    数据结构之Trie树Trie树:应用于统计和排序

  • Trie树

    一、定义 Trie树,又称为单词查找树,是一种树形结构(Trie一词源于单词Retrieval-取出)。Trie树...

  • leetcode——字典树(Trie树)的实现

    leetcode——实现Trie(前缀树) 题目 实现一个 Trie (前缀树),包含 insert, searc...

  • 算法笔记 - Trie 树

    Trie树是一种非常常见的算法 Trie树的主要用途是快速地匹配字符串 Tire树可以记录数值 Trie树的实现成...

  • 以太坊详解 之 Merkle Patricia Tree

    基础知识 Trie树 Trie是一种搜索树,又称字典树(digital tree)和前缀树(prefix tree...

  • 数据结构与算法笔记day21:Trie树|AC自动机

    1Trie树 这节课学习了一种特殊的树,Trie树。Trie树是一种解决字符串快速匹配问题的数据结构。如果用来...

  • Leetcode 208 实现 Trie (前缀树)

    实现 Trie (前缀树) 题目 实现一个 Trie (前缀树),包含 insert, search, 和 sta...

  • 208-实现Trie(前缀树)

    实现Trie(前缀树) 题目 实现一个 Trie (前缀树),包含 insert, search, 和 start...

网友评论

      本文标题:Trie 树

      本文链接:https://www.haomeiwen.com/subject/audrkqtx.html