Trie树

2023-05-16

转载自http://epic.32o.cn/article.asp?id=47,但是这个地址已经不存在了……
所以从维基百科拿来个图进行解释:http://zh.wikipedia.org/wiki/Trie

一个保存了 8 个键的 trie 结构,"A", "to", "tea", "ted", "ten", "i", "in", and "inn".

  今天在vijos有人问我trie树怎么弄。索性就写详细点,让众多新手参考一下。
  Trie树就是字符树,其核心思想就是空间换时间。举个简单的例子。
  给你100000个长度不超过10的单词。对于每一个单词,我们要判断他有没有重复给出,如果重复出现了,则给出第一次出现的位置。
  这题当然可以用hash来,但是我要介绍的是trie树,在某些方面它的用途更大,比如说对于某一个单词,我要查看它的前缀是否出现过。这样hash就不好搞了,而用trie还是很简单。
  现在回到例子中,如果我们用最傻的方法,对于每一个单词,我们都要在所有单词中查找是否有重复,那么这个算法的复杂度就是O(n^2),显然对于100000的范围难以接受。现在我们换个思路想。假设我要查询的单词是abcd,那么在他前面的单词中,以b,c,d,f之类开头的我显然不必考虑。而只要找以a开头的中是否存在abcd就可以了。同样的,在以a开头中的单词中,我们只要考虑以b作为第二个字母的……这样一个树的模型就渐渐清晰了。对于每一个节点,从根遍历到他的过程就是一个单词。那么,对于一个单词,我只要顺着他从跟走到对应的节点,再看这个节点是否存在就可以知道它是否出现过了。新建立节点则相当于插入新单词。这样一来我们询问和插入可以一起完成,所用时间仅仅为单词长度,在这一个样例,便是10。
  我们可以看到,trie树每一层的节点数是26^i 级别的。所以为了节省空间,我们用动态链表,或者用数组来模拟动态,空间的花费不会超过单词数×单词长度。
  程序非常好实现,区区几行,我就不写了,自己琢磨吧。如果还是不懂请留言。

转载于:https://www.cnblogs.com/RoyCNNK/articles/2969490.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Trie树 的相关文章

  • Trie树

    转载自http epic 32o cn article asp id 61 47 xff0c 但是这个地址已经不存在了 所以从维基百科拿来个图进行解释 xff1a http zh wikipedia org wiki Trie 今天在vij
  • 01 Trie 专题

    01 Trie 专题 异或最大值 The xor largest pair 题意 xff1a 异或最大值的模板 一个数和一个序列中一个数的异或最大值是多少 xff1f 要支持询问 思路 考虑把序列插入 xff0c 构建一个 Trie tex
  • 字典树(Trie树) Java实现源码参考

    定义 字典树 又称为单词查找树 Tire数 是一种树形结构 它是一种哈希树的变种 用于保存大量的字符串 它的优点是 利用字符串的公共前缀来节约存储空间 字典树结构对应的Java源码 public class Trie char val bo
  • hihoCoder_1014

    include
  • 如何在 C# 中创建 Trie [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 有谁知道在哪里可以找到如何在 C 中构造 trie 的示例 我正在尝试使用字典 单词列表并用它创建一个字典树 这是我自己的代码 从我的答案中提取如何
  • 如何实现一个具有一次读取 4 位节点的二进制 trie?

    我正在尝试找到一种方法inline某种意义上的二进制字典树 基本上 二进制 trie 为二进制数中的每个槽都有一个节点 在 0 上向左分支 在 1 上向右分支 您将如何构造它以便一次读取 4 位而不是 1 似乎每个 trie 节点中有 16
  • 我可以使用每个节点上都有整个单词的字典树吗?

    我想实现一个 trie 来检查路径的有效性 因此我将构建一棵树 通过按目录分解它来包含所有可能的路径构造 所以像 guest friendsList search将从根节点到它的子节点guest 然后是客人的孩子friendsList 然后
  • Erlang:这个 trie 实现最错误的地方是什么?

    假期里 我的家人喜欢玩Boggle 问题是 我的Boggle 技术很糟糕 所以我做了任何优秀程序员都会做的事情 编写一个程序来给我玩 该算法的核心是一个简单的前缀特里树 http en wikipedia org wiki Trie 其中每
  • 如何找到trie中最长的单词?

    I m having trouble understanding the concept of a trie From the trie wikipedia entry I have this picture 如果我正确地看到这一点 tri
  • 尝试和树之间的区别?

    我记得尝试不存储每个节点的全部数据 只存储父节点的后缀 树确实存储了整个数据 但仅根据前缀组织自身 因此尝试变得更小 这使得例如可以很好地压缩字典 这真的是唯一的区别吗 从实际应用程序中我记得尝试在范围查询中更快 甚至还有特殊的 solr
  • Trie、后缀树、后缀数组

    哪种结构提供最佳的性能结果 trie 前缀树 后缀树还是后缀数组 还有其他类似的结构吗 这些结构的良好 Java 实现是什么 编辑 在这种情况下 我想在大型名称词典和大量自然语言文本之间进行字符串匹配 以便识别文本上词典的名称 特里树是第一
  • 为什么我的 Trie 查找比标准 F# Map 的查找慢?

    所以 我只是从 OCaml 移植了 Trie 不幸的是 就 tryFind 而言 它的运行速度比标准 Map 慢 我不明白这一点 特里树似乎应该更快 F 的代码库是否以某种特殊方式构建 以使它们比用户通常部署的代码更快 这是代码
  • 如何在Python中创建一个trie树

    我对 trie 和 DAWG 直接非循环字图 感兴趣 并且阅读了很多有关它们的内容 但我不明白输出 trie 或 DAWG 文件应该是什么样子 trie 应该是嵌套字典的对象吗 每个字母在哪里又分为to letter等等 如果有 100k
  • 使用 Map 实现 Trie

    我今天正在解决一个问题 但我被困住了 我知道特里树是如何工作的 但问题是我知道如何用静态数组和类来实现它 今天在网上冲浪时我读到有一种方法可以使用 stl map 来实现 attempts 我今天尝试了 但我仍然不知道如何在 int 上插入
  • 键入字符时搜索字符串

    我的手机中存储了联系人 假设我的联系人是 Ram Hello Hi Feat Eat At 当我打字时 A 我应该得到所有匹配的联系人说 Ram Feat Eat At 现在我再输入一个字母T 现在我的总字符串是 AT 现在我的程序应该重用
  • Python Trie:如何遍历它来构建所有单词的列表?

    我在学习 python 时创建了一个 trie 树 这是真实的输出 a b c b a x r z z h e l l o 我无法列出特里树中的所有单词 显然我不明白简单的事情 下面是我的代码 用于创建特里树并添加到特里树以及检查特里树中是
  • 如何从 trie 构造 DAWG?

    我只是构建一个trie http en wikipedia org wiki Trie对于一个词汇表 然后我发现有很多分支共享相同的结构 我想将它们组合在一起 结果是DAWG http en wikipedia org wiki Deter
  • Trie 节省了空间,但是如何节省空间呢?

    我对 Trie 实现如何节省空间并以最紧凑的形式存储数据感到困惑 如果你看下面的树 当您在任何节点存储字符时 您还需要存储对该字符的引用 因此对于字符串的每个字符 您需要存储其引用 好吧 当常见字符到达时 我们节省了一些空间 但在存储对该字
  • O(1) 算法确定节点是否是多路树中另一个节点的后代?

    想象一下下面的树 A B C D E F 我正在寻找一种方法来查询 F 是否是 A 的后代 注意 F 不需要是directA 的后代 在这种特殊情况下这是正确的 只需要针对更大的潜在后代节点池测试有限数量的潜在父节点 当测试一个节点是否是潜
  • 如何从 Trie 中检索给定长度的随机单词

    我有一个简单的 Trie 用来存储大约 80k 长度为 2 15 的单词 它非常适合检查字符串是否是单词 但是 现在我需要一种获取给定长度的随机单词的方法 换句话说 我需要 getRandomWord 5 来返回 5 个字母的单词 所有 5

随机推荐

  • linux启动spark命令,在linux上安装spark

    第一 通过xftp工具将spark安装包上传到linux上 第二 解压spark到指定目录 xff1a tar zxf opt software spark 2 1 0 bin hadoop2 7 tgz C opt module 第三 配
  • c语言long型对应占位符,C语言数据类型打印对应的占位符

    占位符列表 char c和 hhd unsigned char c和 hhu c对应字符身份 xff0c hhd和 hhu对应数字身份 short hd unsigned short hu long ld unsigned long lu
  • android app 历史版本,怎么找到App的所有历史版本,以及每次改版的变更点呢?

    来自知乎的一个问题 提问时间应该挺早的 xff0c 能看到的最早的回答是2011年2月份 关注者242 xff0c 被浏览42 079 7年来 xff0c 加上我最新的一个回答 xff0c 一共有19个回答 随时间流逝 xff0c 里面的一
  • 16核64g服务器性能,16核64g云服务器

    16核64g云服务器 内容精选 换一换 用户可以查看在不同云服务区已经申请成功的专属云 进入指定的专属云 xff0c 还可以查看该专属云内专属计算资源详情及云服务器等专属云内基础服务的实例信息 登录管理控制台 单击左侧上方区域下拉列表 xf
  • 集成测试:自底向上、自顶向下、Big-Bang集成测试、三明治集成测试

    集成测试 xff1a 自底向上 自顶向下 Big Bang集成测试 三明治集成测试 详解测试过程测试方案自顶向下自底向上三明治测试Big Bang集成测试 详解 集成测试也叫组装测试或者联合测试 xff0c 在单元测试完成的基础上进行模块
  • cloudtalk 无法连接到消息服务器,solr - Solr Cloud down无法与Zookeeper对话客户端会话超时 - 堆栈内存溢出...

    我有在16GB RAM内存上运行的solr云 xff0c 用于分片的2个solr节点 相同ip xff0c 嵌入式zookeeper 我在默认配置上运行solr xff0c 尽管默认配置随附 Xms5g Xmx5g xff0c 但我在Sol
  • 网站服务器备案有什么危害,域名备案对服务器有影响吗

    域名备案对服务器有影响吗 内容精选 换一换 证书在有效期内 xff0c 可多次下载并使用 xff0c 下载后即可在服务器 华为云的或非华为云的均可 上进行部署 待安装证书的服务器上需要运行的域名 xff0c 必须与证书的域名一一对应 xff
  • lodash 核心源码学习(基于4.17.11版本)

    源码地址 https raw githubusercontent com lodash lodash 4 17 11 npm core js 13行 b var undefined b es5之前 undefined 可以被 window
  • 常用邮箱的 IMAP/POP3/SMTP 设置

    通过网上查找的资料和自己的总结完成了下面的文章 xff0c 看完之后相信大家对这三种协议会有更深入的理解 如有错误的地方望指正 POP3 POP3是Post Office Protocol 3的简称 xff0c 即邮局协议的第3个版本 它规
  • 顾维灏谈百度地图数据采集:POI自动处理率达90%

    顾维灏谈百度地图数据采集 xff1a POI自动处理率达90 发布时间 xff1a 2015 12 21 22 37 来源 xff1a cnsoftnews com 作者 xff1a 百度地图还创新研发高精地图 xff0c 并成为国内唯一掌
  • 为何float有效位数为7位?

    为何float有效位数为7位 xff1f 首先我们应该明确一点 xff1a C语言中 xff0c xff05 f表示保留7位有效数字7位有效数字 xff1a 是指 整数部分 和小数部分一共7位 单精度数的尾数用23位存储 xff0c 加上默
  • Python绘制正余弦函数图像

    公众号 xff1a Python编程时光 今天打算通过绘制正弦和余弦函数 xff0c 从默认的设置开始 xff0c 一步一步地调整改进 xff0c 让它变得好看 xff0c 变成我们初高中学习过的图象那样 通过这个过程来学习如何进行对图表的
  • JS函数的工厂模式、构造函数模式、原型模式的区别

    创建对象 JS有六种数据数据类型 xff0c 其中五种属于基本数据类型 xff1a Null Boolean undefined String Number 而其它值都是对象 数组是对象 xff0c 函数是对象 xff0c 正则表达式是对象
  • mac 邮件自动归类

    mac 让邮箱自动为你的邮件归类 不知道你的工作当中 xff0c 是否每天会收到一大推的邮件 xff0c 其中对自己有价值的邮件也许也就是这一大推邮件当中的几封邮件 单这几封邮件往往又会被淹没 巧用邮件分类功能 之前使用邮件没有好好的区研究
  • 层次图和HIPO图---描绘软件结构的图形工具

    层次图和HIPO 图 层次图用来描述软件的层次结构 虽然层次图的形式和描绘数据结构的层次方框图相同 xff0c 但是表现的内容却完全不同 层次图中的一个矩形框代表一个模块 xff0c 方框间的连线表示调用关系而不像层次方框图那样表示组成关系
  • continue函数和break函数的区别

    continue函数 谈及contiune函数 xff0c 很多初学者都把它和break弄混淆 xff0c 今天我自己也特意学习了一下 xff0c 在这里分享给大家 当它们用在循环语句的循环体时 xff0c break用于立即退出本层循环
  • linux下进入root用户登录

    1 打开终端 xff0c 输入sudo passwd u root 输入当前用户的登录密码 xff0c 提示如下标红区域信息 解决方案 xff1a 1 xff09 直接输入命令 xff1a su xff0c 输入当前用户登录密码 2 xff
  • 利用Python爬取电影网站

    usr bin env python coding 61 utf 8 39 39 39 本爬虫是用来爬取6V电影网站上的电影资源的一个小脚本程序 xff0c 爬取到的电影链接会通过网页的形式显示出来 39 39 39 import requ
  • python 提取字符串中的数字组成新的字符串

    方法一 有一个字符串text 61 34 aAsmr3idd4bgs7Dlsf9eAF 34 请将text字符串中的数字取出 xff0c 并输出成一个新的字符串 import re text 61 34 aAsmr3idd4bgs7Dlsf
  • Trie树

    转载自http epic 32o cn article asp id 61 47 xff0c 但是这个地址已经不存在了 所以从维基百科拿来个图进行解释 xff1a http zh wikipedia org wiki Trie 今天在vij