zoukankan      html  css  js  c++  java
  • Trie 字典树

    Trie

    Trie(字典树)是一种用于实现字符串快速检索的多叉树结构。Tire的每个节点都有若干个字符指针,若再插入和检索字符串时扫描到一个字符,就沿字符走向指向的节点。

     

    插入

    当需要插入一个字符串时,我们从根走起,依次扫描每一个字符:

    1. 若字符指向一个已经存在的节点,则顺着节点继续走下去
    2. 若字符指向空,则新建一个节点,继续走下去。

    当字符串中的字符都检索完毕时,记录下其终点结点。

    检索

    当需要检索一个字符串是否存在时,我们从根走起,一次扫描每一个字符:

    1. 若字符指向空,则说明不存在,结束。
    2. 若字符指向一个结点,则继续走下去。

     

    当字符串中所有字符被检索完毕时,若当前结点是一个被标记为终点的节点,说明字符串存在,否则说明其不存在。

     1 int trie[SIZE][26], tot = 1;
     2 void insert(char* str){
     3     int len = strlen(str), p = 1;
     4     for (int k = 0; k < len; k++){
     5         int ch = str[k] - 'a';
     6         if (trie[p][ch] == 0) trie[p][ch] = ++tot;
     7         p = trie[p][ch];
     8     }
     9     end[p] = true;
    10 }
    11 bool search(char* str){
    12     int len = strlen(str), p = 1;
    13     for (int k = 0; k <= len; k++){
    14         p = trie[p][str[k] - 'a'];
    15         if (p == 0) return false;
    16     }
    17     return end[p];
    18 }
  • 相关阅读:
    slf4j中的MDC
    redis incr incrby decr decrby命令
    Java接口响应超时监控
    JDK1.7.0_45源码阅读<java.lang.Boolean>
    Debug JDK变量显形
    Java全角、半角字符的关系以及转换
    模型选择
    经验风险最小化
    支持向量机(下)
    支持向量机(上)
  • 原文地址:https://www.cnblogs.com/hnoi/p/11361040.html
Copyright © 2011-2022 走看看