2013-06-18 41 views
0

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

我的一个朋友建议使用MD5,但我认为这可能是矫枉过正的(我从来没有想过我会这样说关于MD5)。

+0

矢量中的数字是什么类型? – PureW

+1

“把这两个数字放在一起”所以它是二维向量? –

回答

2

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

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

尽管如此,你的内存使用量将是巨大的。

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,它们都很容易实现和测试。您还可以试验校验和的长度,以了解校验和如何影响应用程序的其他部分(性能方面)。

1

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

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