美文网首页算法
关于字典树,你还不知道的这些事

关于字典树,你还不知道的这些事

作者: 信息学小屋 | 来源:发表于2020-04-30 12:47 被阅读0次

考虑到NOIP从过去的不考数据结构,到现在的考察范围越来越广,考察难度越来越高,所以,今天我们来介绍一种简单数据结构——字典树,及其基本原理和算法实现。

字典树能干啥

字典树,又名Trie树,是一种用于处理单一字符串与多个字符串相互之间匹配关系的数据结构。字典树作为AC自动机的基础,不仅在字符串处理领域有巨大的作用,同时在位运算、动态规划等方面也占有重要的地位。

关于字典树的应用详解,可以在公众号【信息学竞赛从入门到巅峰】中获取哦。

字典树长啥样

字典树上的每条边代表了一个字母(关键)。从根节点到任意一个节点有且仅有一条路径,而这个节点就代表了由这条路径上的字符依次连接组成的单词。下面举一个例子:

一棵可能的字典树

在这个例子中,字典树由左侧的6个字符串共同构成。树上的边的权值为字母,代表这个一个字符串的下一个字符是什么。点上的标号是对应的字符串的序号(左侧字符串从上到下,从1开始标号)。

字典树如何构造

通过这个例子,构造字典树的算法就已经很显然了。

1、先定义一个根节点root。

2、读入一个字符串后,从根节点开始,沿着对应字母的边往下走。

a. 如果当前节点没有当前字母的边,那么新构造一个节点,将当前节点和新建节点连一条当前字母的边,然后沿着这条边往下走。

b. 如果当前节点有当前字母的边,那么直接沿着这条边往下走。

3、处理完一个字符串后,在最终停留的节点进行标记,表示这个节点代表的字符串是出现过的一个串。

Code

/*
Tips:
本代码使用了面向对象的编程思想,竞赛中可不采用。
本代码在构造字典树时使用了指针,读者可根据实际使用数组模拟指针。
*/
struct node {
int id;
    node* nxt[26];
    node() {
        id = -1;
for (int i = 0; i < 26; ++i)
            nxt[i] = NULL;
    }
};

class TrieTree {
public:
  TrieTree() { root = new node; }
  int get_id(node* x) { return x->id; }
  node* get_root() { return root; }
  node* get_nxt(node* x, char k) { return x->nxt[k - 'a']; }
  void insert(char* c, int id) {
      int len = strlen(c);
      node* now = root;
      for (int i = 0; i < len; ++i) {
          int x = c[i] - 'a';
          if ((now->nxt[x]) == NULL)
              now->nxt[x] = new node;
          now = now->nxt[x];
      }
      now->id = id;
    }
private:
    node* root;
}t;

【信息学竞赛从入门到巅峰】,一个专注于分享OI/ACM常用算法及知识的公众号。

相关文章

  • 关于字典树,你还不知道的这些事

    考虑到NOIP从过去的不考数据结构,到现在的考察范围越来越广,考察难度越来越高,所以,今天我们来介绍一种简单数据结...

  • Python3 关于字典的更多秘密,也许你还不知道

    关于字典的更多秘密,也许你还不知道 让字典的键对应多个值 让字典中的一个键去对应多个值,其实这实现起来并不难。比如...

  • 有些事如果早点知道就好了

    假如我早点知道这些事的话,也许现在的我会变得很优秀吧。不过现在知道了这些事,也还不算太晚。因为种一棵树最好的时间是...

  • 白酒这些事你还不知道?

    何为白酒,什么时候喝酒最好? 白酒乃世间五谷杂粮之精华,也是中华饮食场上之催化,它与我们的现实生活息息相关,...

  • 这些事,你还不知道吧!

    你现在想的是什么? 你接下来就会做什么! 是的,选择。 有人说过这样一句话,当你想知道别人想要什么时,你就看他怎么...

  • 活在当下

    关于明天的事我后天就知道了,关于后天的事我今天还不想知道。

  • 2016.1.15

    关于明天的事我后天就知道了,关于后天的事我今天还不想知道。

  • 数据结构之字典树Trie

    字典树Trie 字典树也叫前缀树,是一种在字符串查找,前缀匹配等问题广泛应用的算法,为什么使用字典树呢?我们都知道...

  • 关于Glide这些你可能还不知道

    Glide 图片的渐隐渐现动画3.6.1以上默认开启 关闭动画 glide支持centerCrop() 和 fit...

  • 关于贫穷,你可能还不知道这些

    当前社会舆论对穷人是有一定的偏见的,认为穷人懒惰、没有志气、甘于堕落,实际是不了解贫穷的本质。 不是只靠勤奋就能摆...

网友评论

    本文标题:关于字典树,你还不知道的这些事

    本文链接:https://www.haomeiwen.com/subject/uyjzwhtx.html