我需要爲封裝這些數據的對象構建一個散列(作爲一個無符號的32位整數)。爲自定義結構生成唯一的哈希值?
Entry {
uint8 r;
uint8 g;
uint8 b;
bool empty;
uint8 count;
}
散列對於每個實例必須是唯一的,除非實例相同。兩個實例相等,當且僅當:
- 數在這兩種情況下等於
和
- R,G,B都等於OR空的設置兩個實例
散列將用於hashma PS和其他容器,所以它可能會被頻繁地調用。散列生成需要很快。
我考慮CCCERRRGGGBBB,其中:
- CCC/RRR/GGG/BBB:計數/ R/G/B上3位數字
- E:1,如果空被設置,否則爲0
但是這個數字超出了範圍。
有什麼想法?
請注意:絕大多數散列並不能保證絕對唯一性,但足夠獨特,以至於驗證精確匹配的額外時間可以忽略不計,因爲它基本上是O(1)。 – BlargleMonster
確保散列對每個實例都是唯一的,尤其是當實例的大小大於散列的大小時(如在您的情況中),您很難或無法保證:您試圖將每個33位值合併到一個獨特的32位變量。 – iamnotmaynard
在你的情況下,唯一性在數學上是不可能的(因爲在32位uint中有更多不同的Entry值) –