2013-06-18 52 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值。你可以測試一下。