问题标签 [hash-function]

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 投票
3 回答
737 浏览

c++ - 保留有关访问状态的信息的想法

我现在制作 15 谜题求解器(在 C++ 中),但我的程序不仅必须解决 15 谜题,还必须解决 3x4 谜题、8x8 谜题等...... - > X x Y 谜题。我必须以某种方式保留有关已访问状态的信息,我的第一个想法是制作树,例如:
拼图:

状态 1
1 2
3 0

状态 2
1 3
0 2

我保留在我的树上:

根->1->2->3->0
            \_
                \->3->0->2

这也适用于所有谜题的 5x3、6x6 等谜题

这个想法行得通,但是它浪费了很多内存,并且添加节点需要一些时间:/所以它非常低效。

下一个想法是在 stl 的 std::map< > 中保持访问状态,但我不知道如何制作好的散列函数 - 从拼图状态制作快捷方式(因为我不必存储拼图状态,我只需要信息已被访问。对于 std::map 的密钥或其他保持信息已被访问的想法,您有什么想法吗?

0 投票
3 回答
14305 浏览

java - 在面试中用于整数、字符串的一个很好的哈希函数?


我在面试中遇到过需要对整数或字符串使用哈希函数的情况。在这种情况下,我们应该选择哪些?在这些情况下我错了,因为我最终选择了产生大量冲突的那些,但哈希函数往往是数学上的,你无法在面试中回忆起它们。是否有任何一般性建议,至少面试官对您的整数或字符串输入方法感到满意?在“面试情况”中,哪些功能适用于两种输入

0 投票
1 回答
1318 浏览

haskell - Haskell 中是否有任何通用的 Hashable 类型类?(又名“派生(可哈希)”)

有没有人写过一个通用函数,以便hash可以为自定义数据类型自动生成函数(使用deriving机制)?有几次,我写了以下样板,

这可以自动生成:基本思想是,无论何时添加数据,都乘以一个素数,例如使用列表,

本质上,我想写的是

编辑 1

感谢大家的所有非常有帮助的回复。当我有时间时,我会尝试添加一个通用方法作为练习。现在(也许 sclv 指的是什么?),我意识到我可以编写更好的代码,

编辑 2

使用 ghc,乘以随机素数比编辑 1 中的元组效果好得多。与 Data.HashTable 的冲突从 95%(非常糟糕)到 36%。代码在这里:[ http://pastebin.com/WD0Xp0T1 ] [ http://pastebin.com/Nd6cBy6G ]。

0 投票
3 回答
5571 浏览

boost - C++:shared_ptr 作为 unordered_set 的键

考虑以下代码

问题是:为什么 s2 的大小是 2 而不是 1?我很确定它一定与哈希函数有关。我尝试查看 boost 文档并在没有运气的情况下使用散列函数。

想法?

0 投票
15 回答
236757 浏览

java - Java HashMap 如何处理具有相同哈希码的不同对象?

根据我的理解,我认为:

  1. 两个对象具有相同的哈希码是完全合法的。
  2. 如果两个对象相等(使用 equals() 方法),则它们具有相同的哈希码。
  3. 如果两个对象不相等,则它们不能具有相同的哈希码

我对么?

现在如果是正确的,我有以下问题:HashMap内部使用对象的哈希码。那么如果两个对象可以有相同的hashcode,那么如何HashMap跟踪它使用了哪个key呢?

有人可以解释HashMap内部如何使用对象的哈希码吗?

0 投票
2 回答
1129 浏览

hash - 为什么布隆过滤器需要多个哈希函数?

我真的不明白为什么布隆过滤器需要多个哈希函数(例如,SHA 和 MD5)。

例如,为什么不制作一个更大的SHA 哈希,然后将其分成多个部分并将它们视为单独的哈希?在速度方面不是更有效吗?

0 投票
2 回答
1746 浏览

c# - SHA1 哈希算法问题

我正在尝试将用户密码存储在我的程序中,但我不想以纯文本形式存储它。因此,我正在对其进行哈希处理并存储它,当用户需要在程序启动时输入他的密码(以防止未经授权的用户)时,我正在对输入的密码进行哈希处理并比较两个哈希值。

但是,以下代码为几乎所有输入的密码生成相同的哈希值。谁能告诉我如何修复以下代码,或者指导我使用更好的哈希函数?

感谢您的任何帮助。

0 投票
1 回答
5386 浏览

c - IMEI 号码和 MAC 地址的组合输入集是否有完美的哈希函数?(C实现)

我正在寻找一个哈希函数,我可以使用它为使用 GSM 调制解调器或以太网连接连接到我们网络的设备提供统一的唯一 ID。

因此,对于任何给定的设备,我都有一个IMEI 号码或一个硬编码的MAC 地址,可用于生成哈希。

在过去的几个小时里,我一直在研究散列函数,阅读我可能想要使用的不同的非加密和加密散列。我的重点是性能上的低冲突,因为不会经常计算哈希。

我的领跑者是 MD5、FNV-1a、MurmurHash2、Hsieh 和 DJB。

无论我使用什么哈希,都必须用 C 语言实现,并且将在带有微型处理器的微控制器上使用。

我知道为您的需要选择一个好的散列函数的诀窍是知道您将提供什么样的输入。

我问这个问题的原因是我脑海中突然出现了一个想法,即 IMEI 和 MAC 都有有限的长度和范围,所以也许存在一个相当简单的哈希函数可以覆盖两者的全部集合并且不会发生冲突。(因此,一个完美的哈希函数)

一个 IMEI 号码是 15 个十进制数字(十六进制是 12-13 个字节?),一个 MAC 地址是 6 个字节。仔细考虑我认为您不会在两组输入数字之间发生冲突,但如果这是错误的,请随时纠正我。如果你这样做了,你能做些什么来阻止它吗?在其中一组中添加一些种子?

我在正确的轨道上吗?是否可以为这些组合集找到完美的哈希函数?

谢谢!

更新

感谢您的回答和评论。我最终使用了恒等函数;)作为我的哈希函数,然后还使用了掩码,因为数字集之间可能存在重叠。

IMEI、IMEISV 和 MAC 都适合 6.5 个字节或更少,所以我将我的值存储在 7 个字节中,然后对第一个字节进行按位或运算,并使用基于数字来自哪个集合的掩码,以确保它们是在所有集合中都是独一无二的。

0 投票
1 回答
651 浏览

java - 局部性保持哈希函数

是否有任何 Java 库为字符串提供了一个(或多个)局部性保留哈希函数的实现?

0 投票
3 回答
25414 浏览

c++ - unordered_map 哈希函数 C++

我需要像这样定义一个 unordered_map unordered_map<pair<int, int>, *Foo>,定义和传递 a hashandequal函数到这个映射的语法是什么?

我尝试将这个对象传递给它:

没有运气:

我不知道是什么size_type_Buskets手段,所以我给了它1。正确的方法是什么?谢谢。