头像

Cyan

四川成都

深度强化学习炼丹师

信息学竞赛模板(七)— 字典树(Trie)

信息学竞赛模板(七)— 字典树(Trie)

2021-03-10 · 90次阅读 · 原创 · 数据结构与算法

概述

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

模板

const int SIZE = 1000000; int trie[SIZE][26], cnt = 1; // trie[i][ch]表示节点为i的节点的ch字符的指针位置,若无则为0 bool str_end[SIZE]; //记录字符串的结尾位置 void insert(char *str) { int len = strlen(str), p = 1; //p 为指针 for (int k = 0; k < len; ++k) { int ch = str[k] - 'a'; if (trie[p][ch] == 0) trie[p][ch] = ++cnt; p = trie[p][ch]; } str_end[p] = true; } bool search(char *str) { int len = strlen(str), p = 1; //p 为指针 for (int k = 0; k < len; ++k) { p = trie[p][str[k] - 'a']; if (p == 0) return false; } return str_end[p]; }

例题

  1. AcWing-142-前缀统计
  2. AcWing-143-最大异或对
  3. AcWing-144-最长异或值路径
  4. AcWing-161-电话列表

标题: 信息学竞赛模板(七)— 字典树(Trie)
链接: https://www.fightingok.cn/detail/65
更新: 2022-09-18 22:35:52
版权: 本文采用 CC BY-NC-SA 3.0 CN 协议进行许可