【发布时间】:2009-10-01 06:14:17
【问题描述】:
我什么都试过了。就连java的论坛啦:
java.lang.String.hashCode():
s[0]*(31^(n-1)) + s[1]*(31^(n-2)) + ... + s[n-1]
我将其解释为总和: 虽然我不太确定如何处理 s[n-1];
int hashmap::hashstr( const char*const str )
{
int result = 0;
int i = 0;
int j = 0;
int k = 0;
unsigned n = 0;
for ( ; str[n] != NULL; ++n ); // how many characters?
while ( j != n ) // no more characters
{
result += str[i] * ( 31 ^ ( n - k ) );
j++;
i++;
k++;
}
return result % maxSize;
}
其中 maxSize 是我的固定数组大小 11 中的第 10 个元素。
我做错了什么?我的一些哈希指数出现了错误。其他的,正确的。为什么是这样?到目前为止,每个人都喜欢,“谁在乎它是如何工作的!使用模板!”好吧,我想明白这一点..
【问题讨论】:
-
我认为在尝试 hashmap 之前你需要学习一些更基本的东西,比如使用 strlen()。
-
您能解释一下您说索引是“错误”还是“正确”?任何散列函数都有效,但有些效率低下。没有“错误”或“正确”之分。您是否将您的实现与 Java 进行比较?
标签: c++