• Trie:字典树


    如何实现搜索引擎的搜索关键词提示功能?

    Trie树,字典树。是一种专门处理字符串匹配的数据结构,用来解决在一组字符串集合中快速查找某个字符串的问题。

    字典树的本质,就是利用字符串之间的公共前缀,将重复的前缀合并在一起。

    其中,根节点不包含任何信息。每个节点表示一个字符串中的字符,从根节点到红色节点的一条路径表示一个字符串

    package day0623;
    /**
     * 字典树的本质,就是利用字符串之间的公共前缀,将重复的前缀合并在一起
     * 如果要在一组字符串中,频繁地查询某些字符串,用Trie树会非常高效
     * 构建Trie树的过程,需要扫描所有的字符串,时间复杂度是O(n)
     * 查询时间复杂度O(k),k是要查找的字符串的长度*/
    public class Trie {
        private TrieNode root = new TrieNode('/');
        // 根节点存储无意义字符
    
        // 往Trie树中插入一个字符串
        public void insert(char[] text) {
            TrieNode p = root;
            for (int i = 0; i < text.length; ++i) {
                int index = text[i] - 'a';
                if (p.children[index] == null) {
                    TrieNode newNode = new TrieNode(text[i]);
                    p.children[index] = newNode;
                }
                p = p.children[index];
            }
            p.isEndingChar = true;
        }
    
        // 在Trie树中查找一个字符串
        // 查找的时候可以通过字符的ASCII码减去‘a’的ASCII码,迅速找到匹配的子节点的指针
        public boolean find(char[] pattern) {
            TrieNode p = root;
            for (int i = 0; i < pattern.length; ++i) {
                int index = pattern[i] - 'a';
                if (p.children[index] == null) {
                    return false; // 不存在pattern
                }
                p = p.children[index];
            }
            if (p.isEndingChar == false) return false; // 不能完全匹配,只是前缀
            else return true; // 找到pattern
        }
    
        //假设字符串中只有从a到z这26个小写字母,下标为0的位置存储指向子节点a的指针,依次类推
        public class TrieNode {
            public char data;
            public TrieNode[] children = new TrieNode[26];
            public boolean isEndingChar = false;
            public TrieNode(char data) {
                this.data = data;
            }
        }
    }
  • 相关阅读:
    sublimetext插件安装
    解决Nextcloud 无法删除目录
    常用文章信息
    使用豆瓣的pip源安装python模块
    top命令的使用
    Centos 7 防火墙 firewalld 简单使用说明
    CentOS 7 时间同步方法
    二进制
    字典
    集合
  • 原文地址:https://www.cnblogs.com/liushoudong/p/12557208.html
Copyright © 2020-2023  润新知