zoukankan      html  css  js  c++  java
  • 字典树学习笔记

    参考博客https://blog.csdn.net/JKdd123456/article/details/84071856

    字典树

    是一种用于统计字符串、文本词频统计的入门级的数据结构。

    基本性质

    (1)根节点不包括字符,除根节点外每一个节点都只包含一个字符。

    (2)用边表示字母

    (3)从根节点到某一节点,路径上经过的字符连起来,为该节点对应的字符串。

    (4)每个节点的所有子节点包含的字符都不相同,每个节点最多有26个子节点(在单词只包含小写字母的情况下)

    (5)有相同前缀的单词公用前缀节点。

    (6)整棵树的根节点是空的,便于插入和查找。

    (7)每个单词结束时用一个特殊字符表示,那么从根节点到任意一个特殊字符,所经过的边的所有字母表示一个单词。

    基本操作

    插入:

    从左到右扫描这个单词,如果字母在相应的根节点下没有出现过,就插入这个字母。

    我们设Trie(i)(j)=k,表示编号为i的节点的第j个孩子为编号为k的节点。

    可以写出插入的代码:

    void insert (string s) {
        int root=0;
        for (int i=0;i<s.length();i++) {
            int id=s[i]-'a';
            if (!Trie[root][id]) Trie[root][id]=++tot;
            root=Trie[root][id];
        }
    }

    查找:

    可以查找某个前缀,也可以查找整个单词。

    bool find (string s) {
        int root=0;
        for (int i=0;i<s.length();i++) {
            int x=s[i]-'0';
            if (Trie[root][x]==0) return false;
            root=Trie[root][x];
        }
        return true;
    }

    还可以用Trie树给字符串排序,将每个字符串依次插入到Trie树中,做先序遍历,可以得到字符串从小到大的顺序,消耗空间较大,但时间复杂度可以降至O(N)。

  • 相关阅读:
    mysql事物中行锁与表锁
    https的实现原理
    基于http的断点续传和多线程下载
    Cookie与Session
    centos 7 安装python3
    为CentOS下的Docker安装配置python3【转】
    Jmeter如何提取响应头部的JSESSIONID【转】
    centOS7 安装nginx
    centos 7.X关闭防火墙和selinux
    (四)从输入URL到页面加载发生了什么
  • 原文地址:https://www.cnblogs.com/zhanglichen/p/13213790.html
Copyright © 2011-2022 走看看