当前位置: 首页 > 知识库问答 >
问题:

具有内存限制的系统的哈希表

潘衡
2023-03-14

我已经读过hashtable的各种变体,但我不清楚哪种更适合内存不足的系统(我们有一个内存限制)
线性/二次探测适用于稀疏表<我认为双重散列在这方面与二次散列相同
外部链接与群集无关
我检查过的大多数教科书似乎都假设总会有额外的空间可用,但实际上,在我看到的大多数示例实现中,由于哈希表从未减半,因此占用的空间比实际需要的要多得多
那么,当我们想充分利用内存时,哈希表的哪种变体最有效?

更新:
所以我的问题不仅仅是桶的大小。我的理解是,铲斗的大小和负载下的性能都很重要。因为如果桶的大小很小,但工作台在50%的负载下会退化,这意味着我们需要经常调整到更大的工作台。

共有1个答案

百里骏
2023-03-14

看看这个Cukoo哈希的变体。

这将需要更多的哈希函数,但是,这是有意义的——你需要为节省内存付出一些代价。

 类似资料:
  • 这里是我需要完成的,但是我刚开始哈希&甚至不知道从哪里开始。有人能帮帮我吗? 对由5个字符(A-Z和A-Z中的字符)组成的文本词设计一个名为Bailando的哈希函数。 提供一个算法(一组操作)来生成哈希函数的输出。尝试提出一个看起来没有冲突的哈希设计。 什么是基于您的设计的Bailando(“hello”)、Bailando(“three”)和Bailando(“olleh”)。 是否可以在哈希

  • 我在做一个程序,比较哈希表中线性探测、二次探测和单独链接所需的平均访问量和最大访问量。 我已经做了三个案例的元素插入部分。当从哈希表中找到元素时,我需要有一个结束搜索的限制。在单独链接的情况下,当下一个指针为空时,我可以停止。对于线性探测,当探测到整个表时,我可以停止(即表的大小)。在二次探测中,我应该用什么作为限制?表大小可以吗? 我的二次探测函数是这样的 其中i从0到无穷大。请帮帮我...

  • 问题内容: 在Java中,如果我创建一个并将N个元素放入其中,它将占用多少内存?如果依赖于实现,那么什么才是好的“猜测”? 问题答案: 编辑; 噢,天哪,我是个白痴,我提供了HashMap的信息,而不是HashTable的信息。 但是,检查后,出于内存目的,实现是相同的。 这取决于您的VM的内部内存设置(项目的包装,32位或64位指针以及字对齐/大小),并且不是由Java指定的。 可以在这里找到有

  • 如果我实现一个哈希表,我理解插入是在恒定的时间内完成的。我也明白,如果没有碰撞,我可以在不变的时间内找到物品。然而,如果我插入一个项目,并在任意索引中使用链表链接它,它最终在位置2,但它在列表下链接了3个链接,这是O(n)时间,进行搜索吗?

  • 我一直在使用来存储键值对,其中键和值都是sha256哈希摘要。我需要能够找出列表中是否存在一个键,并且能够检索该dict的值。 目前,根据我的一些测试,我估计需要大约10Gb的内存来存储8000000个哈希,因为实际存储的数据只有512MB(每个哈希32字节,所以每个记录64字节) 有人有什么建议吗? 更新,基于我认为应该更新的一些评论。我将散列存储为字节,而不是十六进制字符串。我使用sqlite

  • 本文向大家介绍Python限制内存和CPU使用量的方法(Unix系统适用),包括了Python限制内存和CPU使用量的方法(Unix系统适用)的使用技巧和注意事项,需要的朋友参考一下 问题 你想对在Unix系统上面运行的程序设置内存或CPU的使用限制。 解决方案 resource 模块能同时执行这两个任务。例如,要限制CPU时间,可以像下面这样做: 程序运行时,SIGXCPU 信号在时间过期时被生