【发布时间】:2019-08-15 07:07:50
【问题描述】:
我使用Elk Scheme interpreter 已经有一段时间了,有时也会浏览它的源代码。
我注意到它在 symbol.c 中包含以下哈希函数:
int Hash (char const *str, unsigned int len) {
register int h;
register char const *p, *ep;
h = 5 * len;
if (len > 5)
len = 5;
for (p = str, ep = p+len; p < ep; ++p)
h = (h << 2) ^ *p;
return h & 017777777777;
}
源代码中没有描述函数的内容。
这个哈希函数有名字吗?
散列方案是否记录在某处?
【问题讨论】:
-
那东西很旧。我想知道在方案代码中是否可以看到方案中的哈希值,并且他们必须保留旧的哈希值。
-
@Joshua,它在代码库中仅使用一次:
h = Hash (str, len) % OBARRAY_SIZE;其中h的类型为int。h用作数组的索引。 -
看起来它基本上是一个具有不同常量的FNV 算法。奇怪的是它只看前 5 个字符...
-
不幸的是,Subversion 提交日志也不包含有用的解释性消息。