我了解哈希表的数学基础。我在下面有一个哈希函数(我在某处找到的):
/* Fowler / Noll / Vo (FNV) Hash */
static const size_t InitialFNV = 2166136261U;
static const size_t FNVMultiple = 16777619;
size_t myhash(const string &s, int length)
{
size_t hash = InitialFNV;
for(size_t i = 0; i < length; i++)
{
//XOR the lower 8 bits
hash = hash ^ (s[i]);
//Multiply by the multiple
hash = hash * FNVMultiple;
}
return hash;
}
- 为什么返回
size_t
? - 如何使用它来编写一个
store()
函数放置一个 哈希表中的字符串? - 这如何适用于数组 字符?
- 关于#3,更换是否合适
for
循环和一个while
循环 在'\0'
字符处终止?
仅供引用,我正在准备第二次面试,这就是我问的原因。
最佳答案
它返回
size_t
因为这是 native 整数(也是最快的)。为什么选择其他任何东西?“ table ”?哪个表?如果你指的是哈希表,那么你可以使用返回值来选择一个随机桶来放入对象。(提示:想想“剩余”。)
不是已经适配数组了吗?
如果它是以 null 结尾的字符串,为什么不呢?
关于c++ - 为什么哈希函数返回一个 size_t,它是如何使用的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6394228/