【发布时间】:2020-10-17 15:39:39
【问题描述】:
我正在研究 CS50 的 pset 5,拼写器。我需要一个散列表的散列函数,它可以有效地存储字典中的所有单词(~140,000)。我在网上找到了这个,但我不明白它是如何工作的。我不知道<< 或^ 是什么意思。这是哈希函数,谢谢! (如果您能帮助我,我将不胜感激:))
int hash_it(char* needs_hashing)
{
unsigned int hash = 0;
for (int i=0, n=strlen(needs_hashing); i<n; i++)
hash = (hash << 2) ^ needs_hashing[i];
return hash % HASHTABLE_SIZE;
}
【问题讨论】:
-
<<和^是基本的 C 运算符,将在任何 C 书籍或教程中介绍。如果您查阅这些资源以了解此类语言基础知识或使用您最喜欢的搜索引擎进行一些基础研究,那将是最好的.. -
这不是一个好的散列函数。对于这个应用程序,我建议使用 CityHash 或 SipHash。
标签: c operators hashtable cs50 hash-function