![]() |
1
8
为什么不将这四个整数存储在一个合适的数据结构中,并对它们进行比较呢?在这种情况下对它们进行散列的好处在我看来是可疑的,除非存储是一个问题。 如果存在存储问题,则可以使用所分析的哈希函数之一 here . |
![]() |
2
4
下面是一个从4个整数到1个整数的相当合理的哈希函数:
还有其他具有其他特性的散列,但在证明其他特性之前,通过素数乘法进行累加是一个良好的开端。如果愿意,可以尝试使用xor进行累加,而不是加法。无论哪种方式,都很容易产生冲突(例如{1,0,a,b}与所有a,b的{0,37,a,b}冲突),因此您可能希望选择一个素数,您认为它与函数中任何看似合理的实现错误无关。所以,如果你的函数中有很多模-37运算,也许可以用1000003代替。 |
![]() |
3
3
因为散列可以生成冲突,所以无论如何都必须将密钥保留在内存中才能发现这些冲突。Hashmaps和其他标准数据结构在其内部簿记中实现了这一点。
|
![]() |
4
1
我完全同意Vinko的观点——只是比较一下。如果你仍然想要一个好的散列函数,你需要分析你的4个非单整数的分布。然后,您必须以某种方式构建哈希函数,结果将均匀分布在整个32位哈希值范围内。 一个简单的例子——让我们假设大多数时候,每个函数的结果都在0到255之间。然后,您可以轻松地将每个函数的低8位混合到哈希中。大多数时候,您会直接查找结果,只是有时候(当一个函数返回更大的结果时)会发生冲突。 总之,如果没有关于这4个函数的结果是如何分布的信息,我们就无法帮助您使用一个好的哈希函数。 |
![]() |
5
0
为什么要炸土豆条?似乎std::set或std::multi set更适合存储这种输出。您所需要做的就是将四个整数包装在一个结构中,然后编写一个简单的比较函数。 |
![]() |
7
0
可能有点过分,但是考虑一下 Boost.Hash |
![]() |
AstralHex · 矩阵乘法代码工作不正常 4 月前 |
![]() |
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 4 月前 |
![]() |
Die4Toast · 递归调用成员箭头运算符-> 4 月前 |
![]() |
Anka Hanım · 关于结构和动态数组地址的问题 4 月前 |