用于地图C++的哈希函数
Hashing Function for Map C++
我正在尝试确定一个哈希函数,该函数接受输入(i,k)并确定唯一的解决方案。
(i, k) 的可能输入范围为 0 到 100。将每个 (i, k) 视为三项式树中节点的位置。
Ex: (0, 0) can diverge to (1, 1) (1, 0) (1, -1).
(1, 1) can diverge to (2, 2) (2, 1) (2, 0).
这里给出的示例:
http://www.google.com/imgres?imgurl=http://sfb649.wiwi.hu-berlin.de/fedc_homepage/xplore/tutorials/stfhtmlimg1156.gif&imgrefurl=http://sfb649.wiwi.hu-berlin.de/fedc_homepage/xplore/tutorials/stfhtmlnode41.html&h=413&w=416&sz=4&tbnid=OegDZu-yeVitZM:&tbnh=90&tbnw=91&zoom=1&usg=__9uQWDNYNLV14YioWWbrqPgfa3DQ=&docid=2hhitNyRWjI_DM&hl=en&sa=X&ei=xAfFUIbyG8nzyAHv2YDICg&ved=0CDsQ9QEwAQ
我正在使用地图
map <double, double> hash_table
我需要一个键值来确定从对 (i, k) 到哈希到该值 (i, k)
到目前为止,我只能提出线性函数,例如:双Hash_function(国际 I, 国际 K)
{
//double val = pow(i, k) + i;
//return (val % 4294967296);
return (i*3.1415 + k*i*9.12341);
}
但是,我无法确定具有某个(i,k)的唯一键。我可以使用哪些功能来帮助我做到这一点?
从
数学上讲,你是在寻求一个双射。这不是计算机科学意义上的哈希函数,因为哈希函数预计偶尔会产生冲突(除非它是一个完美的哈希函数)。
您标记hash_table
的不是哈希表。 std::map
是一种称为有序映射的不同数据结构,它能够使用小于运算符<
提供严格弱排序的任何键类型。实际上,您可以使用 utility
标头中的std::pair
:
std::map<std::pair<int, int>, double> table;
要插入到表中,请使用:
table[std::make_pair(i, j)] = value;
@Grizzly是正确的,使用double作为键是有问题的。也许使用基于字符串的哈希技术会更好?
如果 i 和 k 是 0-100,那么你的密钥可以是一个简单的短键(甚至是有符号的),并且是用类似 short key = i | k << 8
的东西唯一生成的。
相关文章:
- 如何为位集找到/实现一个好的哈希函数
- 对于短字符串来说,这是一个很好的哈希函数吗?
- 我在C++中使用提升哈希函数将 3 个双精度组合成一个面临冲突的哈希
- 无冲突的哈希函数
- Qt5 哈希函数在 Windows 7 和 Windows10 上不会返回相同的哈希
- 解决由于在哈希函数中使用了不完整的类型而导致的编译失败
- 使用 Murmur2 64 位哈希函数生成会导致冲突的输入
- 错误:哈希函数必须可使用键类型的参数进行调用
- unordered_set是否适合存储矢量<int>元素的数据结构?如果是这样,我将如何实现哈希函数?
- 为什么C++哈希函数的返回类型是 std::size_t,而不是独立于平台的类型?
- 哈希函数计算
- 哈希函数中同一键的不同值和良好的哈希值排序
- 将 C# 哈希函数转换为C++
- 如何创建用于生成噪声的哈希函数
- 插入不从哈希函数中检索键
- 简单的 C++11 哈希函数无法编译
- 对于这个英语单词列表来说,什么是好的哈希函数?
- std::bitset 哈希函数算法
- 如何生成伪随机 32 字节字符串以用作加密哈希函数中的盐?
- C unordered_map自定义的哈希函数碰撞