哈希表 v 自平衡搜索树

2024-03-17

我很想知道使用自平衡树技术来存储项目比使用哈希表更重要的推理是什么。

我发现哈希表无法维护插入顺序,但我始终可以在顶部使用链表来存储插入顺序序列。

我发现对于少量的值,哈希函数会增加成本,但我总是可以将哈希函数与密钥一起保存以加快查找速度。

我知道哈希表比直接实现红黑树更难实现,但在实际实现中,人们不会愿意为此付出额外的努力吗?

我发现对于哈希表,发生冲突是正常的,但是使用开放寻址技术(例如允许将密钥保存在哈希表本身中的双重哈希),问题是否已减少到不予倾斜的效果对于这样的实现,红黑树?

我很好奇我是否严格忽略了哈希表的一个缺点,该缺点仍然使红黑树在实际应用程序(如文件系统等)中相当可行的数据结构。


这是我能想到的:

  1. 有些数据无法进行哈希处理(或者哈希成本太高),因此无法存储在哈希表中。
  2. 树按照您需要的顺序(排序)保存数据,而不是插入顺序。即使您通过哈希表运行链表,也无法(有效地)使用哈希表来做到这一点。
  3. 树有更好的最坏情况性能
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

哈希表 v 自平衡搜索树 的相关文章

  • 具有墓碑的哈希表的负载因子

    那么问题来了 在计算哈希表的负载因子时是否应该包括墓碑 我认为 考虑到负载系数是用来确定何时扩展容量的 所以不应该包括墓碑 一个明显的例子是 如果您几乎填充然后删除哈希表中的每个值 这里的插入非常容易 没有碰撞 所以我相信负载因子不应该包括
  • 我什么时候应该对整个哈希表进行重新哈希?

    我如何决定何时应该对整个哈希表进行重新哈希 这在很大程度上取决于您解决冲突的方式 如果您使用线性探测 负载系数远高于 60 左右时 性能通常会开始严重下降 如果您使用双散列 80 85 的负载因子通常是相当合理的 如果使用碰撞链 负载系数高
  • mmap 与 O_DIRECT 进行随机读取(涉及哪些缓冲区?)

    我正在实现一个基于磁盘的哈希表 支持大量键 26 百万 该值被反序列化 整个文件的读取本质上是随机的 值小于页面大小 并且我正在针对 SSD 进行优化 安全性 一致性并不是那么大的问题 性能很重要 我当前的解决方案涉及使用mmap 文件与M
  • 通用哈希函数系列只是为了防止敌人攻击吗?

    如果我的目的只是拥有一个好的哈希函数 将数据均匀地分布到所有存储桶中 那么我不需要想出一系列哈希函数 我只需使用一个好的哈希函数即可 对吗 拥有一系列哈希函数的目的只是让敌人更难构建病态数据集 因为当我们随机选择哈希函数时 他 她不知道使用
  • 字符串的哈希函数

    我正在用 C 语言研究哈希表 并且正在测试字符串的哈希函数 我尝试的第一个功能是添加 ascii 代码并使用模 100 但我的第一次数据测试结果很差 130 个单词有 40 次碰撞 最终输入数据将包含 8000 个单词 它是存储在文件中的字
  • SAS 哈希表:有没有办法在不同的键上查找/连接或具有可选键

    我经常处理一些键不完美的数据 并且我需要连接来自不同源的数据 我想继续使用哈希对象以获得速度优势 但是当我使用大量数据时 我可能会遇到崩溃 记忆限制 一个简单的概述是我有 2 个不同的键 它们都是唯一的 但并非每条记录都存在 我们将它们称为
  • 哈希表大小和键的有效位

    我有一个关于哈希表大小和模块化哈希的问题 我指的哈希算法如下 hash key table size array index 我正在阅读一本算法教科书 其中给出了以下建议 如果表大小不是素数 则可能会出现键的所有位在确定 array ind
  • TreeMap<> 操作的时间复杂度:get() 和 subMap()

    基于这篇文章 TreeMap 操作的时间复杂度 subMap headMap tailMap https stackoverflow com questions 14290751 time complexity of treemap ope
  • 为什么Hashtable的initialCapacity是11,而HashMap的DEFAULT_INITIAL_CAPACITY是16并且需要2的幂?

    比较HashMap and Hashtable在JDK 1 6的源代码中 我在HashMap中看到了以下代码 The default initial capacity MUST be a power of two static final
  • 哈希函数增量意味着什么?

    例如 我听说 MurmurHash2 不是 增量 的 但 MurmurHash3 是增量的 这是什么意思 为什么它有用 增量哈希函数适用于以下情况 如果先前 哈希消息 M 稍微更新为新消息 M 然后 应该相当快地计算更新后的哈希值 消息 M
  • C 中的布谷鸟哈希

    有没有人有实施布谷鸟哈希 http en wikipedia org wiki Cuckoo hashing在C语言中 如果有一个开源的非 GPL 版本那就完美了 既然 Adam 在评论中提到了它 有人知道为什么它没有被太多使用吗 这只是一
  • Powershell:使用哈希表替换字符串

    好的 我已经设置了一个哈希表 其中名称是要替换的内容 键是要替换的内容 如下所示 r dog canine cat feline eric eric cartman 接下来我应该做什么 我试过这个 Get Content C scripts
  • graph - 如果我用哈希表替换邻接列表中的每个链表,有什么缺点?

    CLRS excise 22 1 8 我是自学 没有在任何大学学习 假设每个数组条目 Adj u 不是链表 而是一个 包含顶点 v 的哈希表 其中 u v E 如果所有 边缘查找的可能性相同 预计的时间是多少 判断图中是否有边 有什么缺点
  • 以有效的方式将哈希表转换回字符串数据

    我正在尝试以有效的方式将哈希表转换回键值对 目前我正在使用这个 kv hash GetEnumerator ForEach kv Name Value 有没有办法直接将哈希表转换为键值对 或者我的意思是字符串数据 有ConvertFrom
  • Java:HashMap 大小是“质数”还是“2 的幂”?

    许多书籍和教程都说哈希表的大小必须是素数才能将键均匀分布在所有桶中 但是Java的HashMap始终使用 2 的幂的大小 难道不应该使用素数吗 作为哈希表大小 质数 或 2 的幂 哪个更好 使用 2 的幂可以有效地屏蔽哈希码的最高位 因此
  • Java 哈希表与对象引用的问题

    我有一个哈希表 例如 HashTable ht 1 1 2 1 3 1 现在 我像 Integer foo Integer 1 一样实现它 并像这样声明哈希表 HashTable ht foo foo 2 foo 3 foo 现在 据我了解
  • 有条件地将键值对包含在哈希中[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 有人可以帮我缩短以下方法吗 我从这个开始 我很喜欢 def self some hash foo gt bar end 现在我想添加一个可选键 我能想
  • 构建哈希表/哈希函数

    我想构建一个哈希表 用于查找 1 到 15 个字节的字节序列 字符串 中的键 我想存储一个整数值 所以我想一个用于散列的数组就足够了 我很难概念化如何构造一个哈希函数 以便给定的键将给出数组的索引 任何帮助将不胜感激 哈希中的最大条目数为
  • 对于范围从 0 到最大值的 uint64_t 键,最佳哈希函数是什么?

    假设我们有一组元素并希望将它们存储在哈希映射中 例如std unordered set 并且每个元素都有一个 type 的键uint64 t其值可以从 0 到最大可能值变化 使用简单哈希函数 其中键的哈希值就是键本身 是最佳选择吗 它是否取
  • ANSI C 哈希表实现,数据位于一个内存块中

    我正在寻找一种哈希表的开源 C 实现 它将所有数据保存在一个内存块中 因此可以轻松地通过网络发送数据 我只能找到为添加到其中的每个键值对分配小块内存的内存 预先非常感谢您的所有投入 编辑 它不一定需要是哈希表 无论键值对表可能会做什么 序列

随机推荐