哈希表和Trie(前缀树)如何选择?

2023-12-11

因此,如果我必须在哈希表或前缀树之间进行选择,那么导致我选择其中之一的区别因素是什么。从我自己天真的角度来看,使用 trie 似乎有一些额外的开销,因为它不是存储为数组,但就运行时间而言(假设最长的键是最长的英语单词),它本质上可以是 O (1)(相对于上限)。也许最长的英文单词有 50 个字符?

哈希表是即时查找的一旦你得到索引。然而,对密钥进行哈希处理来获取索引似乎很容易需要近 50 个步骤。

有人可以为我提供对此更有经验的观点吗?谢谢!


尝试的优点:

基础知识:

  • 可预测的 O(k) 查找时间,其中 k 是键的大小
  • 如果不存在,则查找时间可能少于 k 时间
  • 支持有序遍历
  • 不需要哈希函数
  • 删除很简单

新业务:

  • 您可以快速查找键的前缀,枚举具有给定前缀的所有条目等。

链式结构的优点:

  • 如果有许多公共前缀,则它们所需的空间是共享的。
  • 不可变尝试可以共享结构。您可以构建一个仅在一个分支上不同的新特里树,而在其他地方指向旧特里树,而不是就地更新特里树。这对于并发、表的多个同时版本等非常有用。
  • 不可变的 trie 是可压缩的。也就是说,它可以共享结构suffixes也可以通过哈希consing。

哈希表的优点:

  • 每个人都知道哈希表,对吧?您的系统已经有一个很好的优化实施,比大多数用途的尝试更快。
  • 您的密钥不需要有任何特殊的结构。
  • 比明显的链接 trie 结构更节省空间(请参阅下面的评论)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

哈希表和Trie(前缀树)如何选择? 的相关文章

  • 具有 2 个属性的背包算法。如何在 3d 数组中实现它?

    当有超过 1 个属性时 我无法理解背包问题 当有 1 个属性时 我必须编写一个使用具有 2 个属性的背包算法的程序 老师告诉我们 它必须在 3d 数组中完成 错误的实现将导致 O 2 n 处理时间 我无法想象这样的数组会是什么样子 假设这是
  • Florian 的 Grisu2 算法如何工作?

    我遇到了一个关于将 double 转换为 ascii 的问题 经过搜索 我得到了 Florian 的论文 使用整数快速准确地打印浮点数 http www cs tufts edu nr cs257 archive florian loits
  • 两组点之间的最佳匹配

    I ve got two lists of points let s call them L1 P1 x1 y1 Pn xn yn and L2 P 1 x 1 y 1 P n x n y n 我的任务是找到它们点之间的最佳匹配 以最小化它
  • 以 O(1) 计算汉明权重 [重复]

    这个问题在这里已经有答案了 在二进制表示中 汉明权重是 1 的数量 我偶然发现了网络并找到了一个 O 1 的答案 v v v gt gt 1 0x55555555 v v 0x33333333 v gt gt 2 0x33333333 in
  • Linux内核container_of宏和C90中的通用容器

    是否有可能实施容器的 http lxr linux no linux tools perf util include linux kernel h L18纯C90中的宏 我不确定如何做到这一点 因为内核实现取决于海湾合作委员会黑客 http
  • Prim 的迷宫生成算法:获取相邻单元格

    我基于 Prim 算法编写了一个迷宫生成器程序 该算法是 Prim 算法的随机版本 从充满墙壁的网格开始 选择一个单元格 将其标记为迷宫的一部分 将单元格的墙壁添加到墙壁列表中 While there are walls in the li
  • 归并排序中的递归:两次递归调用

    private void mergesort int low int high line 1 if low lt high line 2 int middle low high 2 line 3 mergesort low middle l
  • 高效列出目录中的所有子目录

    请参阅迄今为止所采取的建议的编辑 我正在尝试使用 WinAPI 和 C 列出给定目录中的所有目录 文件夹 现在我的算法又慢又低效 使用 FindFirstFileEx 打开我正在搜索的文件夹 然后我查看目录中的每个文件 使用 FindNex
  • 数量重新分配逻辑 - 具有外部数据集的 MapGroups

    我正在研究一种复杂的逻辑 需要将数量从一个数据集重新分配到另一个数据集 在例子中我们有Owner and Invoice 我们需要从数量中减去Invoice准确地Owner匹配 在给定汽车的给定邮政编码处 减去的数量需要重新分配回同一辆车出
  • 如何计算排列? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个关于 Java 排列的问题 Suppose I have five different elements in an arra
  • 从 1 到 20 亿,像 (23,29) 这样相差 6 的连续素数对的数量

    如何在考虑时间复杂度的情况下从 1 到 20 亿 使用任何编程语言且不使用任何外部库 找到像 23 29 这样相差 6 的连续素数对的数量 尝试过埃拉托色尼筛 但获得连续素数是一个挑战 使用了生成器 但时间复杂度非常高 代码是 def ge
  • 应用对数来导航树

    我曾经知道一种使用对数从树的一片叶子移动到树的下一个 有序 叶子的方法 我认为它涉及获取 当前 叶子的位置值 排名 并将其用作从根向下到新目标叶子的新遍历的种子 一直使用对数函数测试来确定是否沿着右或左节点向下到达叶子 我已经不记得如何运用
  • AStar-名称解释

    我正在寻找 AStar A 算法为何被称为 AStar 的解释 所有类似的 最短路径问题 算法通常都以其开发者的名字命名 那么 AStar 代表什么 有称为 A1 和 A2 的算法 后来证明A2是最优的 实际上也是可能的最好算法 所以他给它
  • 使用到达时间差对信号进行三边测量

    我在寻找或实现寻找信号源的算法时遇到一些麻烦 我的工作目标是找到声音发射器的位置 为了实现这一点 我使用了三个麦克风 我正在使用的技术是多点定位这是基于到达时间差 The 到达时间差使用发现每个麦克风之间互相关接收到的信号 我已经实现了算法
  • 欧拉项目 45

    我还不是一名熟练的程序员 但我认为这是一个有趣的问题 我想我应该尝试一下 三角形 五边形 六边形 数字由以下生成 公式 三角形 T n n n 1 2 1 3 6 10 15 五边形 P n n 3n 1 2 1 5 12 22 35 六角
  • 优先连接,Matlab 中的复杂网络

    大家好 我现在正在 MATLAB 中研究优先附件模型 在理解以下内容时遇到一些困难 假设我一开始有 4 个节点 连接如下 time 0 1 lt gt 2 3 lt gt 4 在下一个时间步骤中 我添加一个节点和 4 个连接 然后添加另一个
  • pytesseract 无法从图像中识别复杂的数学公式

    我在用pytesseractpython 中的模块 pytesseract从图像中识别文本 但它不适用于包含复杂数学公式 例如根 推导 积分数学问题或方程 的图像 代码2 py Import modules from PIL import
  • 贪心技术与穷举搜索有何不同?

    我正在为一些示例问题编写伪代码 并且我注意到贪婪技术和详尽搜索之间存在令人担忧的模式 Job 1 Job 2 Job 3 Job 4 Job 5 Person 1 9 2 7 8 Person 2 6 4 3 7 Person 3 5 8
  • 2D形状识别与解析算法

    我正在寻找一种算法 用于从给定的一组 x y 点检测简单形状 如矩形 三角形 正方形和圆形 我还在寻找一种方法 一旦检测到 将路径转换为更干净的形状 我已经查遍了互联网 但没有找到任何 简单 的方法 几乎所有这些对于我的简单实现来说都是高级
  • 如何检测图像是否像素化

    之前有人在 SO 上提出过这样的问题 在Python中检测像素化图像 https stackoverflow com questions 12942365 detecting a pixelated image in python还有关于q

随机推荐

  • Sqlalchemy 的问题并将 jsonb 数组插入到 postgresql

    所以我试图将 jsonb 值数组插入到我的数据库中 但我似乎无法正确格式化它 这是我的代码 updated old passwords append index 1 password hashed password user old pas
  • 如何为express.js 服务器设置 SSL 证书?

    之前 在旧版本的 Express 中 我可以这样做 express createServer key keyFile cert certFile 然而 在较新版本的 Express 中 这不再有效 var app express 我应该打电
  • 产品口味本地化

    我有 3 种产品风格 每种风格都进行了调试和发布 我已经成功地为每种风格赋予了独特的字符串和图标 现在我正在准备本地化 这需要针对每种产品口味使用不同的字符串 这是我当前的文件夹 目录设置 myApp src main res values
  • 如何在运行 CLI 和 Apache2Handler 时将系统环境变量获取到 PHP 中?

    我的系统是Ubuntu我已经设置了我的环境变量 etc environment 如果我在跑步PHP脚本使用CLI 环境变量来自 etc environment被认可 但是 如果我去执行PHP脚本通过http domain test php
  • Python电子邮件引用-可打印编码问题

    我使用以下命令从 Gmail 中提取电子邮件 def getMsgs try conn imaplib IMAP4 SSL imap gmail com 993 except print Failed to connect print Is
  • 使用 PyQt4 进行 OpenCV 视频捕获

    我一直在尝试使用 PyQt4 GUI 和 OpenCV 捕获视频 我创建了一些按钮 如 开始 结束 等来控制捕获 开始很好 但我无法停止捕捉 要停止捕获 我需要中断 while 循环开始捕获 下面的功能 我无法实现 现在 结束捕获 毁坏了窗
  • 在贪婪重复中回溯平衡组可能会导致不平衡?

    作为出于此问题的目的而一般编写的示例 我的目的是匹配一些数量a的 那么同样数量的b的 再加上一个b 检查此片段中展示的两种模式 也在 ideone com 上 var r1 new Regex xn a a a
  • 如何使CardView具有可点击和可检查的效果,以及如何使其成为深色主题?

    背景 在引入CardView之前 我在上面做了一些选择器my app模仿卡片 并让用户选择应用程序使用的主题 有些人更喜欢深色主题 问题 我想让它看起来和工作起来更原生 所以我尝试使用 CardView 遗憾的是 我无法理解如何设置 Car
  • Math.cos 不准确

    alert Math cos Math PI 2 为什么结果不精确为零 这是不准确的 还是一些实施错误 Math PI 2是实际值的近似值pi 2 取该近似值的精确余弦值不会产生零 您获得的值是该精确值的近似值 最高可达基础浮点数据类型的精
  • 恢复已删除的 Eclipse 项目

    我想在 eclipse 中创建一个新的 git 存储库 当我删除旧的存储库时 不幸的是整个项目已从工作区中删除了 有什么办法可以恢复项目吗 我将不胜感激你的回答 如果您的工作有另一个存储库 例如中央 git 服务器 另一个开发人员 另一台计
  • 在应用程序之间共享文件

    我可以与另一个应用程序共享一个应用程序相关的数据吗 假设我在 apk2 的 resources raw 文件夹中有一个音乐文件 我可以在 apk1 1 中使用相同的文件吗 thx 如果您的应用程序使用相同的证书进行签名并具有相同的andro
  • 为什么 Vue 无法解析本地主机的图像?

    作为 vue js 的后端 我使用 laravel 端口 8000 在我的数据库中 我有用户及其个人资料照片的名称 this user photo 所以 我想展示这张照片 img alt Profile Photo 当我去http loca
  • MySQL:事务与锁定表

    我对事务与锁定表有点困惑 以确保数据库完整性并确保 SELECT 和 UPDATE 保持同步并且没有其他连接干扰它 我需要 SELECT FROM table WHERE LIMIT 1 if condition passes Update
  • Objective-C:`@synthesize fooBar;` 与`@synthesize fooBar=_fooBar;` [重复]

    这个问题在这里已经有答案了 可能的重复 带下划线前缀的综合属性和变量 这是什么意思 我在代码中见过这两个 有什么不同 synthesize fooBar synthesize fooBar fooBar synthesize fooBar
  • 处理IE浏览器中的ctrl+按键事件

    I m using hotkeys Ctrl key in my flex application getting problem when my app is running in IE when I press Ctrl D im ge
  • 使用 Doctrine 构建通用的 OO ACL

    我正在寻求设计一个以学说为基础的 ACL 系统供我自己使用 尽管我在一些最初的设计考虑因素上遇到了困难 现在我正在考虑根据类和唯一标识符来制作它 并将它们存储在表中 如下所示 Table ACL ResourceClass Resource
  • 子进程打开('source venv/bin/activate'),没有这样的文件?

    我想进入 python 文件中的虚拟环境 但它没有引发这样的文件 import subprocess subprocess Popen source Users XX Desktop mio worker venv bin activate
  • 如何绘制双对数 R 图的线性回归?

    我有以下数据 someFactor 500 x c 1 250 y x 25 someFactor 我以双对数图显示 plot x y log xy 现在我使用线性模型 找出 数据的斜率 model lm log y log x model
  • 如何以编程方式从 Android 删除 SQLite 数据库

    我想从以下位置删除数据库文件Android file system以编程方式 我可以启动 shell 脚本吗adb它又在 Android 空间中运行 shell 脚本来删除数据库 我可以在短时间内完成这件事吗JUnit测试用例 带有syst
  • 哈希表和Trie(前缀树)如何选择?

    因此 如果我必须在哈希表或前缀树之间进行选择 那么导致我选择其中之一的区别因素是什么 从我自己天真的角度来看 使用 trie 似乎有一些额外的开销 因为它不是存储为数组 但就运行时间而言 假设最长的键是最长的英语单词 它本质上可以是 O 1