尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Trie字典树

Trie字典树
📅 发布时间:2026/6/19 11:54:44

字典树介绍

字典树(Trie,前缀树或单词查找树)是一种多叉树形数据结构,专门用于高效存储和检索字符串(或有序序列) 的前缀、完整序列。其核心设计思想是利用数据的公共前缀共享存储路径,从而减少空间浪费,并将插入、查询的时间复杂度降低到与序列长度相关的水平(O(L),L为序列长度),在字符串处理场景中具有不可替代的优势。

核心思想

在处理大量字符串时,若直接存储每个字符串,会存在大量重复前缀的冗余(比如apple、app、apply都共享app前缀)。字典树通过让拥有相同前缀的字符串共享同一部分路径,将冗余的前缀合并,从而实现空间和时间的优化。

比如插入字符串单"abc",“abb”,“bca”,"bc"。红点代表有一个以此节点为终点的单词。

image

然后,我们如果要查找某个单词如s=“abc”,就可以这样

image

构建字典树

int id = 0;             // 节点计数器:为新建节点分配唯一编号(根节点固定为0)
int cnt[N];             // cnt[p]:以节点p对应的前缀的模式串数量(核心统计值)
unordered_map<int, int> node[N];  // 每个节点的子节点映射:// node[p]是哈希表,键=字符转换后的索引,值=子节点编号

插入模式串以构建字典树

void insert(string s){int p = 0;  // 从根节点(编号0)开始遍历for(int i = 0; i < s.size(); ++i){  // 遍历字符串的每个字符int t = change(s[i]);  // 字符转索引if(node[p][t] == 0){  // 若当前节点p的t字符对应的子节点不存在id++;  // 新建节点,编号自增node[p][t] = id;  // 记录子节点编号}p = node[p][t];  // 移动到子节点cnt[p]++;  // 该前缀的模式串数量+1}
}

在字典树上查找文本串

int find(string s){int p = 0;  // 从根节点开始遍历for(int i = 0; i < s.size(); ++i){  // 遍历查询字符串的每个字符int t = change(s[i]);  // 字符转索引if(node[p].count(t) == 0) return 0;  // 子节点不存在,返回0p = node[p][t];  // 移动到子节点}return cnt[p];  // 返回该前缀的模式串数量
}

 

例题:【模板】Trie 字典树_牛客题霸_牛客网

 代码通过change函数实现了大小写字母均支持的字典树

const int N = 1e5 + 5;
int id = 0;
int cnt[N];
unordered_map<int, int> node[N];int change(char c){if(c >= 'a' && c <= 'z') return c - 'a';if(c >= 'A' && c <= 'Z') return 26 + c - 'A';return -1;
}void insert(string s){int p = 0;for(int i = 0; i < s.size(); ++i){int t = change(s[i]);if(node[p][t] == 0){id++;node[p][t] = id;}p = node[p][t];cnt[p]++;}
}int find(string s){int p = 0;for(int i = 0; i < s.size(); ++i){int t = change(s[i]);if(node[p].count(t) == 0) return 0;p = node[p][t];}return cnt[p];
}void solve(){int n, q;string s, t;cin >> n >> q;for(int i = 0; i < n; ++i){cin >> s;insert(s);}while(q--){cin >> t;cout << find(t) << endl;}
}

 

相关新闻

  • 户外LED显示屏安装前期风载与防水考量深度解析
  • SmartLayout智能窗口布局工具:重新定义你的多任务工作空间
  • LangFlow语音助手前后端联动设计方案

最新新闻

  • 巧用Google Colab:将Google Drive共享链接文件安全转存至个人云盘
  • 实验五 输入输出流
  • 2026寄快递避坑攻略 新手这样寄最省钱 - 快递物流资讯
  • 2026年6月玉林旧金回收行情解读,正规实体门店避坑攻略 - 润富黄金回收
  • 2026杭州终极攻略✨卡地亚爱彼腕表高价变现完整教程 - 逸程
  • 从校园实验到创意实践:基于Audition的音频处理全流程解析

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号