特定のケースの関数で大きな j の場合、以下のハッシュ関数は負の値を返します。
int hashing::hash(string a)
{
int i = 0;
int hvalue = 0;
int h =0 ;
while(a[i]!=NULL)
{
hvalue = hvalue + (int(a[i]))*pow(31,i);
i++;
}
h = hvalue%j;
return h;
}
そんなことがあるものか?どうすれば修正できますか?
上記のコードでは、j はファイルのサイズを使用して計算された素数です。負の値は、文字列の形式が「the s」である特定のケースで発生します。
私は何を間違っていますか?どうすれば修正できますか?