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

    • Trie树

      Trie树是一种用于实现字符串快速检索的多叉树结构。Trie的每个节点都拥有若干个字符指针,若在插入或检索字符串时扫描到一个字符c,就沿着当前节点的c字符指针,走向该指针指向的节点。

    • 初始化

      一棵空Trie仅包含一个根节点,该点的字符指针均指向空。

    • 插入

      当需要插入一个字符串S时,我们令一个指针P起初指向根节点。然后,依次扫描S中的每个字符c:

        1.若P的c字符指针指向一个已经存在的节点Q,则令P = Q。

        2.若P的c字符指针指向空,则新建一个节点Q,令P的c字符指针指向Q,然后令P = Q。

      当S中的字符扫描完毕时,在当前节点P上标记它是一个字符串的末尾。

            

    • 检索

      当需要检索一个字符串S在Trie是否存在时,我们令一个指针P起初指向根节点,然后依次扫描S中的每个字符c:

        1.若P的c字符指针指向空,则说明S没有被插入过字典树,结束检索。

        2.若P的c字符指针指向一个已经存在的节点Q,则令P=Q。

      当S中的字符扫描完毕时,若当前节点P被标记为一个字符串的末尾,则说明S在字典树中存在,否则说明S没有被插入过。

     1 int trie[N][26], val[N];
     2 int tot = 1;
     3 void Insert(char* s)
     4 {
     5     int len = strlen(s), p = 1;
     6     forn(k, len)
     7     {
     8         int ch = s[k] - 'a';
     9         if(trie[p][ch]==0)
    10             trie[p][ch] = ++tot;
    11         p = trie[p][ch];
    12     }
    13     val[p] = true;
    14 }
    15 bool Search(char* s)
    16 {
    17     int len = strlen(s), p = 1;
    18     forn(k, len)
    19     {
    20         p = trie[p][s[k] - 'a'];
    21         if(p==0)
    22             return false;
    23     }
    24     return val[p];
    25 }
    View Code
  • 相关阅读:
    [Vue warn]: Error in render: "TypeError: Cannot read property '0' of undefined、vuejs路由使用的问题Error in render function
    web 实时通信的方法总结
    SVN相关
    Redis__WindowsServer主从服务部署及调用实例
    Sqlserver__数据表排序记录和界面显示排序记录不一致的问题
    redis_常见问题
    redis_常用命令
    电商项目系列文档(二)
    redis配置文件redis.conf参数说明
    CMD_命令行
  • 原文地址:https://www.cnblogs.com/zssst/p/11157803.html
Copyright © 2011-2022 走看看