2013-10-29 27 views
0

對於我的哈希表,我需要從輸入生成一個uint32類型的唯一鍵:一個uint32和一個uint64變量。你能幫我解決一下uint32類型的唯一鍵嗎?C編程:哈希鍵(uint32)生成(輸入:一個uint32和一個uint64生成唯一鍵)

輸出:一個uint32唯一值。

輸入:一個UINT32和一個UINT64

能否請您幫助我的邏輯

+0

抱歉,我關閉了question.if你添加任何你嘗試的話,我會重新打開。 – Gangadhar

+0

你能幫我解決一下上面提到的兩個輸入產生一個獨特的值嗎? – Joy

+0

如果你的輸入是一個uint32和一個uint64,並且你的輸出是一個uint32,那麼你有96位輸入和32位輸出,並且(除非你有沒有告訴我們的東西),你不能生成每個輸入的獨特輸出。但是散列到_unique_散列值並不是散列工作的方式。如果輸入的位數多於生成的散列值,則會發生衝突,這就是它應該如何實現的。 –

回答

1

我明白你正在實施一個哈希表的哈希函數。 基本上你可以使用uint32_t將xint和xor與uint64_t進行摺疊。

uint32_t hash(uint32_t a , uint64_t b) { 
    return a^ (b >> 32) ^b; 

}

+0

非常感謝。對於a和b的不同值,它會是唯一的嗎?只是想到確認。 – Joy

+0

不,它不可能是唯一的,但它以某種方式保留了輸入的分佈。您不能將96位信息存儲到32位信息中。 –

+0

我會親自轉移一點。如果a和b相等,這個散列函數將始終爲零。這可能不是問題,但是== b看起來像是一件可能隨機發生的事情,所以除非我更瞭解關於輸入的更多信息,否則我會考慮這一點。 –