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
  • 相关阅读:
    IOS UITableView 加载图片 卡的问题
    泛型
    正则表达式
    CSS 实现圆角表格
    CSS 横向滚动广告
    WebService
    CSS 弹出层 支持IE/FF/OP
    XML2DT DT2XML
    HttpWebRequest 调用 WebService 返回 xml
    CSS 自由伸展的三栏式版面
  • 原文地址:https://www.cnblogs.com/zssst/p/11157803.html
Copyright © 2011-2022 走看看