具有独特结果的细长算法,用于组合两个数字

时间:2013-06-18 08:35:17

标签: javascript math hash

我有一个带有两个双重组件的向量类,精度高达第三个小数位,实例化为每秒十亿次。
我计算它们的长度大约一样多 现在我想将长度存储在内存中,我认为像HashMap /字典这样的东西是个好主意,但这意味着我需要一个密钥。所以我想:为什么不使用矢量组件。由于我不能有两把钥匙,我正在寻找一种方法将这两个数字放在一起(顺序显然没关系)并得到一个独特的结果。

我的朋友建议使用MD5,但我认为这可能是矫枉过正(我从未想过我会说MD5)。

3 个答案:

答案 0 :(得分:2)

简单地连接两个值?所以使用128位密钥,前64位是第一个双倍,第二个64位是第二个双倍?

根据您使用的语言,您也可以使用Object / Struct / any作为键。

但是你的内存使用量会很大。

答案 1 :(得分:2)

正如你所说,md5感觉相当矫枉过正。有很多简单的哈希函数,例如XOR哈希对于低级别的东西很常见

unsigned xor_hash ( void *key, int len )
{
    unsigned char *p = key;
    unsigned h = 0;
    int i;

    for ( i = 0; i < len; i++ )
        h ^= p[i];

    return h;
}

但是,如果性能很重要,那么您应该搜索一个对您的数据类型有效的校验和。没有好的答案。

有许多替代方案here,所有这些方案都很容易实现和测试。您还可以尝试校验和的长度,以查看校验和的长度会影响应用程序的其他部分(性能方面)。

答案 2 :(得分:1)

有点'蛮力',但如何连接字符串表示?如果强制数字为小数点后3位,则12.23和100.1将为12.230100.100

唯一的缺点是转换为字符串需要花费大量时间 - 我认为不仅仅是DThoughts建议连接双值。你可以测试一下。