问题标签 [double-hashing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2306 浏览

algorithm - 双散列如何工作?

我正在阅读有关双重哈希以及如何将其与哈希表的开放寻址方案一起使用的信息。我理解开放寻址中的哈希函数 h(k) 需要为给定键 k 生成探测序列的要求,使得探测序列是集合 <0, 1, ..., m-1> 的某种排列对于 m 个桶。线性探测通过使用函数增加探测计数来简单地做到这一点

双散列使用函数

因此探测以 i*h2(k) 的增量进行。

双重散列的建议是选择“m”作为 2 的幂,并始终从 h2(k) 返回一个奇数,以便这两个数字是互质的。这如何保证探测序列是集合 <0, 1, ..., m-1> 的排列?

0 投票
2 回答
8925 浏览

java - 双重哈希与第一个和第二个哈希函数的冲突-java

对于双重哈希,如果与第一个哈希函数发生冲突,您将使用第二个哈希函数,但如果仍然存在冲突怎么办?例如,假设哈希表的大小为 15,哈希函数为(key + 3) % 15,第二个哈希函数为((key % 8) / 3) + 2。假设“插入 59”通过第一个哈希函数进入索引 2,但那里已经有一个键。第二个哈希函数会将其变为 3,但假设那里也已经有一个值。59 会插入哈希表的什么位置,为什么?谢谢

我特别想使用双重哈希,而不是链式哈希或线性探测。

0 投票
1 回答
335 浏览

c++ - 双散列函数返回错误值

我正在创建一个双哈希映射,但删除功能在插入后不起作用。我遵循相同的格式来增加索引,但它只是没有达到正确的索引。

这是我的主要内容:

输出:

如您所见,第一个索引散列为0. 由于10密钥与 冲突0,双散列(10)应该散列到1,但它的散列到2。为什么它返回错误的值?

0 投票
1 回答
3053 浏览

c++ - 双散列 - 删除和重新散列功能

我正在研究一个哈希图,并且在使用双哈希开放地址样式映射的删除功能时遇到了问题。假设我在大小为 10 的表上插入,我的 2 个哈希函数如下:

如果我使用键 0、10 和 20 插入项目,这些项目将转到位置 0、2 和 3。

但是,在删除项目时,我想删除该项目并重新散列同一集群中的以下项目。当我删除密钥为 0 的项目时,它会发现要删除的项目没有问题。但是,它现在需要跳转到索引 2 - 但它不能因为它使用键 0 作为它的增量,所以它跳转到索引 1。因此,它永远不会在集群中找到后续项目。我该怎么做呢???

0 投票
0 回答
996 浏览

c - 使用双散列解决字符串的冲突?

我有一个包含大约 10k 个字符串的输入文件。我需要数一数。使用开放寻址,双重哈希的冲突。但是代码进入无限循环,即,它根本找不到任何空的地方来填充!(对于大于 1000 的输入)。

根据给我的问题,我们应该使用它。 第一个哈希:ASCII 第二个哈希的总和:除法即 mod sizeof(Prime)

我认为这与我的哈希函数有关。

我创建了一个结构数组,用于使用以下存储字符串。

然后创建一个数组,如下所示:

以下是我使用的 2 个哈希函数:

下面是我的插入功能。

如何改进我的哈希函数,使其访问数组上的所有 10k 位置。?(或完全改变它)。

根据给我的问题,我们应该使用它。第一个哈希:ASCII 第二个哈希的总和:除法即 mod sizeof(Prime)

0 投票
1 回答
3428 浏览

hash - 双散列与线性散列

我正在编写只需要整数的双哈希表。

并尝试使用 SetData() 将数据插入表中

将 100 个整数项放入大小为 100 的表中后,表显示一些索引留空。我知道,这将需要 O(N) ,这是最坏的情况。我的问题是,即使需要最坏的搜索时间,项目也应该插入没有空白空间的表中,对吗?我找不到我的功能的问题。

附加问题。有众所周知的哈希算法,双重哈希的目的是尽可能减少冲突,H2(T)是H1(T)的备份。但是,如果众所周知的哈希算法(如 MD5、SHA 等,我不是在谈论安全性,只是众所周知的算法)更快且分布良好,为什么我们需要双重哈希?

谢谢!

0 投票
1 回答
262 浏览

java - 字典双哈希效率

简单地说,我有一个单词字典,我将它们添加到哈希表中。

我正在使用双散列(不是传统方法),以下是产生最好的结果。

这给了我 127,000 次碰撞。我还有一个 2 倍的素数哈希表大小,它无法更改。

有什么办法可以改进双散列算法?(上述两种方法中的任何一种)。

我知道这取决于我们在哈希表中存储的内容等,但是是否有任何直观的方法或一些更普遍适用的技巧,这样我就可以避免更多的冲突。

0 投票
0 回答
387 浏览

c - 在c中使用双重哈希和重新哈希时如何获取哈希表的索引?

我编写了一个程序来为用户名和加密密码创建哈希表。插入哈希表时,我使用双哈希函数来获取密钥。我有两个哈希函数。那是当调用第一个哈希函数时,我得到了一个索引。如果它不包含任何元素,我将插入该索引。如果它包含数据,我会调用第二个哈希函数来获取索引。在所有成功插入之后,我存储到一个文件中。然后,当超过用户数时,我使用重新散列(大小翻倍)来增加我的哈希表大小。

我的逻辑是当我加载服务器时,它将文件内的所有数据插入到哈希表中。但我有些怀疑。我使用用户名作为获取索引的键。当我将文件中的所有数据插入哈希表时,如何找到索引?(混淆是关于双重哈希。)插入后,我想用现有用户名验证客户端用户名。我怎样才能得到这个特定的用户数据?(我没有将任何密钥存储到文件中。)那么我怎样才能得到那个密钥呢?(这里的问题也是双重哈希。)

我想用双重哈希来做到这一点。当我使用单个散列函数(将用户名作为检索索引的键传递)时,我知道要获取详细信息。但我想避免使用双重散列的冲突。有什么建议么?

0 投票
2 回答
1490 浏览

java - 为可能为负的整数实现双重哈希

我正在使用双散列方法实现整数的散列类。输入将是随机整数,可以是正数或负数。

我的问题是如何计算负整数的哈希值?

这是方法:

计算h(k)后,如果没有碰撞,就会插入到它的位置。如果发生冲突,我将计算 (h(k) + s(k)) mod p 并将密钥存储在计算的结果值中。

所以我的问题是,如果键是负整数,我应该在散列之前取它的绝对值(使其为正)吗?或者还有其他方法吗?

0 投票
1 回答
3010 浏览

c - how to search using double hash in c

I have a server to receive request from multiple client. I have done this with threads. I want to insert some user name and password to hash table. For that I am using double hash method. It was inserted successfully. But I want to know when user enter a user name, I need to search on hash table whether this username already present. But I can't do it now. I know the concept like using hashing. Get the index using hashfunction1 through username and use double hash like this. But how can I write that code ?

My code:

How can I write code to search a username is already present using double hashing from hash table in C? I think traverse whole hash table is not good practice ..is it?