用于地图C++的哈希函数

Hashing Function for Map C++

本文关键字:哈希 函数 C++ 地图 用于      更新时间:2023-10-16

我正在尝试确定一个哈希函数,该函数接受输入(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 的东西唯一生成的。