簡體   English   中英

什么是int32的快速理想哈希函數?

[英]What's a fast ideal hash function for int32?

我需要理想的(無沖突)哈希函數將int映射到相同大小的int。 最簡單的方法是交換一些位的位置,但是也許有一些操作次數少且哈希種子容易更改的快速實現? 也許使用一些快速對稱密碼? x86具有AES指令。 我不需要可移植性,因此使用SSE或其他x86特定指令進行加速的東西會很棒嗎? 因為哈希應該非常快。

uint32_t hash( uint32_t value )
{
    return( value * 0xdeece66d + 0xb );
}

使用像FNV32-1A這樣的簡單哈希,可能會得到更好的結果。

諸如crc32clmulaes等復雜的指令具有較高的吞吐量,但它們也可以具有較高的延遲。 就它們自己而言,它們也不一定能為您提供更好的分發。

您應該考慮的另一件事是沖突與哈希函數的成本。 線性探針通常應在合理數量的探針上表現良好,因為16個值將適合單個高速緩存行。 通過預測緩存訪問,CPU可能也可以隱藏訪問成本。

還需要考慮的是占用率和桌子尺寸之間的權衡。 有時,將表大小增加一倍會更有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM