hashtable相关内容

最好的哈希函数uint64_t中键范围从0到最大值是什么?

假设我们有一组元素,并希望将它们存储在一个哈希表(例如的std :: unoredered_set ),每个元素都有类型的密钥 uint64_t中该值可以从0变化到其最大可能值,它是用琐碎的杂凑函数是最好的选择,其中一个关键的哈希值是一个关键的本身呢?是否依赖于容器中,使用(即谷歌的稀疏散VS从STL无序图)?外观键值的概率是未知的。 解决方案 如果你所散列的任何可能的值未知的概率一个uint ..
发布时间:2015-11-30 21:00:46 C/C++开发

什么应该是在一个哈希表中关键的最佳实践

最好的查找结构是一个的HashTable 。它提供了平均的持续访问的(线性在最坏的情况下)。 这取决于散列函数。好吧。 我的问题是下面。假设一个很好的实施了的HashTable 如: 的HashMap 有没有关于地图通过密钥的最佳做法?我的意思是,建议重点必须是不可变的对象,但我不知道是否还有其他建议。 例如,密钥的长度?例如,在一个良好的HashMap(以上述方式),如果我们使用字符串钥匙 ..
发布时间:2015-11-30 20:44:09 Java开发

查找一本大书的10个最常用的单词

我知道这已被要求在论坛上几次,我没有发现任何'标签'的答案可能被认为是最合适的soluion - 这样问一次: 我们都给予了非常大的文本从书中所有这一切都不能放入内存。我们必须找到在文本中排名前10位最频繁存在的话。什么是最优化的(时间和空间)的方式来做到这一点? 我的想法: 除以文件为k个相当大的块(使得每个块中的可被存储在存储器中)。现在,在每个块的执行外部排序。一旦我们有了(N / K ..
发布时间:2015-11-30 20:32:14 C/C++

我应该在什么时候做的老调重弹整个哈希表?

我如何决定什么时候应该怎么做换汤不换药整个哈希表? 解决方案 这取决于你如何解决冲突很大。如果用户线性探测,性能通常开始严重下降pretty的带负荷率达到60%左右的高得多。如果使用双散列,80-85%的负载系数通常是pretty的合理性。如果您使用的碰撞链接,性能通常保持合理的负载系数高达约150%或以上。 我有时甚至创建了平衡树的冲突解决一个哈希表。在这种情况下,可以几乎的忘记重新散列 ..
发布时间:2015-11-30 20:30:04 C/C++

对于Hashtable的超时机制

我有一个哈希表,根据交通繁忙。我想补充超时机制对哈希表,删除太旧记录。我的担心是, - 它应该是轻量级 - 删除操作都有时间要求不严格。我的意思是(超时值是1小时)删除操作可以是1小时和1小时15分钟之后,。没有问题。 我的看法是, 我创建了一个大阵列(如环形缓冲区),那家商店把时间和哈希表的关键, 当添加到哈希表,使用数组索引找到阵列把时间下一个插槽, 如果阵列插槽空,把插入时间和HT关键, ..
发布时间:2015-11-30 20:29:25 Java开发

冲突解决:二次探测与分离链

好了,我一直在做与哈希表和不同的冲突解决问题的一些实验。我试图找出哪些是做的发现,即使用单独的链接或二次探测冲突解决一个哈希表更有效。我的研究结果表明,单独的链接是比小负荷因素,如0.4或0.2二次探查得更快。这样的话或者我的结果错了吗? 解决方案 在之间这两种方法都是对的的处理成本的 的区别   (带链接)   - 是间接的,即指针引用 与   (含二次 ..
发布时间:2015-11-30 20:26:36 Java开发

为什么哈希表在不断的平均访问时间?

我不明白这其中的解释说,如果n为元素的哈希表中的数字,m是桶的总数则哈希表在不断的平均访问时间仅当n是成正比的THETA(N)。为什么一定成正比? 解决方案 以及实际m应该为与n成比例。否则,你可以,例如,刚刚1桶,这将是就像一个无序集。 要更precise,如果m与n成比例,也就是M = * n,则在每个桶中的项目数将为n /米= 1 / C是一个常数。去任何桶是一个O(1)操作(只计算哈 ..
发布时间:2015-11-30 16:19:10 C/C++

为什么要使用线性哈希表中探测时,没有与列表分离链联系?

我最近了解了不同的方法来处理在哈希表冲突。只见那用链表的分离链总是有更多的时间效率和空间效率,我们分配predefined内存线性探测这以后,我们可能不会使用,因为我们动态地使用内存分离链,从而为独立的链接用链表并不比直线更有效探索?如果是的话,为什么我们那么使用线性探测呢? 解决方案 我很惊讶,你看到链接哈希比线性探测快 - 在实践中,线性探测通常显著高于链快。事实上,这就是它的使用的主要原 ..
发布时间:2015-11-30 16:18:48 C/C++

特里的复杂性和搜索

什么是创建单词的列表的一个线索的复杂性,什么是复杂搜索另一组单词在线索? 我应该使用线索字符串搜索,当我有哈希表? 解决方案 在创建线索的复杂性是 O(宽*长),其中是W 是字的数目,和→是词的平均长度:您需要执行→查找平均每个 W的词语的设定。 也是一样的找单词后:执行→步骤为每个是W 字 哈希插入和查找具有相同的复杂性:每个字,你需要检查的平等,这需要 0(1),为的总体复杂性 O(宽 ..
发布时间:2015-11-30 15:36:13 C/C++

在HashMap中或哈希表换汤不换药过程

如何在一个HashMap或哈希表中的重散列的过程完成后的大小超过maxthreshold值? 只是复制到桶的新数组所有对? 编辑: 什么碰巧在同一桶重散列后的元素(在链表)?我的意思是他们将继续留在同一个桶中后,老调重弹? 解决方案 在问题上的最大阈值被称为负载系数。 最好是具有约0.75的负载因子。负载因数定义为(M / N),其中n是哈希表的总大小,m是pferred的$ P $它 ..
发布时间:2015-11-30 15:34:14 Java开发

请解释一下杂音哈希?

我刚刚发现杂音哈希,似乎是目前最快的,相当抗碰撞性。我试图挖掘更多关于完整的源$ C ​​$ c中的算法或实现,但我有困难的理解它。可能有人解释这里所使用的算法,或完整的源$ C ​​$ C实现它,preferably在C.我读从作者网站的C源$ C ​​$ C,但不知道,这样的:什么是种子, H,K,米? 这是什么意思: K * =米; K ^ = K>> - [R; K * ..
发布时间:2015-11-30 15:31:06 C/C++

哈希表V / S树

是哈希表总是比树快?虽然哈希表有O(1)搜索的复杂性,但如果由于设计不佳的散列函数很多冲突的发生,如果我们处理采用链式结构(比如一个平衡树),然后运行时间搜索最坏的情况下会为O冲突(日志N猜想)。所以,我可以断定为或大或小的数据集,即使在情况最坏的情况下哈希表总比树快?另外,如果我有足够的内存和我不想要范围的搜索,我可以经常去的一个哈希表? 解决方案 是哈希表总是比树快? 不,不是的总是 ..
发布时间:2015-11-30 15:21:19 C/C++

什么是哈希函数的使用倍增法的缺点

有被引用pretty的两种基本方法实现的哈希函数每得多课本和CS课程: 司法在这里我们简单地做 K模m 基本采摘米首相不要太接近2的力量。 倍增法在这里我们乘K的一些精心挑选的无理数(克努特建议使用基于黄金比例数)0〜1,取本品的小数部分,并使用所需数量最显著位来自它。 大多数教科书和课程举出几个缺点的方法1,包括事实,即它是昂贵的,事情取决于微米。但是我从来没有看过任何一本教科书或课程提唯一 ..
发布时间:2015-11-30 15:14:46 C/C++

为什么在哈希表大小加倍呢?

检查在Java和哈希表code例子在网上google搜索似乎是表的大小调整通过加倍完成它。 但大多数教科书说,对于该表的最佳尺寸是素数。 所以我的问题是: 是加倍的方法,因为: 这是很容易实现,或 是找到一个素数的效率太低(但我觉得找 使用下一任去了 N + = 2 和测试素性 模数为O(loglogN),这是便宜) 或者,这是我的误解,只有特定的哈希表的变种 只需要黄金表的大小? 更新 ..
发布时间:2015-11-30 14:56:01 Java开发

哈希表 - 为什么它比数组快吗?

在那里我有一个关键的每一个元素,我不知道该元素到一个数组的索引的情况下,哈希表进行比阵列更好(O(1)VS为O(n))。 这是为什么?我的意思是:我有钥匙,我哈希它..我有散..不应该的算法比较对每个元素的hash该哈希?我认为有内存配置背后的一些诀窍,是不是? 解决方案 在那里我有一个关键的每个元素的情况下,我不知道 元素到一个数组的索引,哈希表的性能比好 阵列(O(1)VS为O(n) ..
发布时间:2015-11-30 14:55:17 C/C++

三叉树VS哈希表

我需要知道,如果一个三叉树比的我的答复碰到这个问题 这普林斯顿一家网站似乎是信仰的源泉。我把其被描述为为O(log的n + k)的其中n是存储的字的数目,k是密钥的长度一看算法。 在我看来,这可能是更快的唯一方法是,如果你经常寻找那些尚未存储的元素。困扰我,另一件事是,一个线索的非连续爬行往往会引起你打已换出的页面,但是这是否是一个重大的影响只能通过基准测试中可以看出。 现在我知道,有可能利弊 ..
发布时间:2015-11-30 14:49:56 C/C++

为什么删除使用双向链表哈希表的元素是O(1)?

在CLRS的教科书“介绍算法”,有对皮克这样的段落。 258。 我们可以删除在O(1)时间的元素,如果列表是双向链表。 (请注意,双链HASH-DELETE作为输入的元素x,而不是其密钥k,从而使我们不必寻找对于x首先,如果哈希表支持缺失,那么它的链表应当双链接,以便我们可以快速删除的项目。如果列表只单链表,然后删除元素x,我们首先必须求x在列表中,这样我们就可以更新的下一步的X的$ P属性$ ..
发布时间:2015-11-30 14:46:36 C/C++

为什么哈希表扩张通常是由规模扩大一倍呢?

我做的哈希表有点研究,我一直在整个的经验法则运行,当有一定数量的作品(无论是最高还是通过负载因子样75%)的哈希表应扩大 几乎总是推荐是加倍(或双加1,即,2n + 1个)的哈希表的大小。不过,我一直没能找到一个很好的理由。 为什么双重的大小,而比,也就是说,增加它的25%,或者它提高到下一个质数的大小,或下面k的素数(例如,三)? 我已经知道,它往往是一个好主意,选择哪是一个素数,至少如果 ..
发布时间:2015-11-30 14:43:13 C/C++

生成相同的唯一的哈希code所有字谜

最近,我参加面试,就面临哈希冲突一个很好的问题。 问:给定一个字符串列表,打印出字谜一起。 例: I / P:              {行为,神,动物,狗,猫} O / P:      &N ..
发布时间:2015-11-30 13:51:28 C/C++

二叉树与链表与哈希表

我要建一个符号表的一个项目我工作。我想知道什么人民的意见是对的各种方法的优点和缺点,可用于存储+创建符号表。 我已经做搜索的公平一点,最常见的建议是二进制树或链表或哈希表。我想知道什么是以上所有的优点,还是缺点(我无法找到这样的东西)。 谢谢, 本 更新:我在C ++的工作。 解决方案 您的使用情况是presumably将是“插入一次数据(例如,应用程序启动),然后进行大量的阅读,但几乎 ..
发布时间:2015-11-30 13:33:51 C/C++