0

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

我的一个朋友提议使用 MD5,但我认为这可能有点矫枉过正(我从没想过我会这么说 MD5)。

4

3 回答 3

2

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

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

但是,您的内存使用量将是巨大的。

于 2013-06-18T08:40:19.490 回答
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;
}

但如果性能很重要,您应该搜索对您的数据类型表现良好的校验和。没有黄金答案。

这里有很多替代方案,它们都非常容易实现和测试。您还可以试验校验和的长度,以了解更长的校验和对应用程序其他部分的影响(性能方面)。

于 2013-06-18T10:20:33.830 回答
1

有点“蛮力”,但如何连接字符串表示?如果您将数字强制保留 3 位小数,则 12.23 和 100.1 将是 12.230100.100

唯一的缺点是转换为字符串需要很多时间——我认为比 DThoughts 建议的连接双精度值更多。你可以测试一下。

于 2013-06-18T10:33:28.640 回答