簡體   English   中英

std :: unordered_map的哈希函數有哪些限制

[英]What are the limitations for hash functions with std::unordered_map

我正在使用std :: unordered_map來表示3維空間排列中的數據。 我的哈希函數是:

unsigned int x,y,z;
unsigned int a =1000;
unsigned int b = 1000*a;
unsigned int Hash = x + a*y + b*z;

在發生任何碰撞之前,它最多應允許x的1000個單位,y的1000個單位。 我的問題是,哈希函數的無沖突空間是否有限制? 還是可以將a和b設置為大數,請注意,如果全部分配,這很容易超出系統的內存?

干杯

首先,了解散列表的操作背景:

哈希表分配的存儲桶不足以容納哈希函數的整個空間。 那確實是浪費的(也許也是不可能的)。 他們分配一定數量的存儲桶(例如16個),然后將每對存儲在存儲桶中,密鑰散列以對存儲桶的數量取模。

當地圖達到已占用存儲桶的某個閾值(通常為75-85%)時,存儲桶數量會增加。 這將強制對所有鍵進行重新哈希處理,以便可以將它們應用於新的模數。

因此,如果您的哈希函數為特定鍵返回50,並且哈希表有16個存儲桶,則該鍵對存儲在存儲桶(50 mod 16)= 2中。

如果隨后將存儲桶數增加到32,則該對將移動到存儲桶(50 mod 32)= 18。

我可以將a和b設置為大數嗎

絕對地,因為哈希是對分配的存儲桶的數量取模,用於查找特定密鑰的存儲桶。

暫無
暫無

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

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