ページ 11

ハッシュ関数の動作がわかりません。

Posted: 2013年6月19日(水) 10:26
by たかし
大学でハッシュ法を習いました。
動作の仕組みは何となく理解できたのですが、ハッシュ関数内でのハッシュ値をどのようにして決めているのかわかりません。
学校で習ったハッシュ関数は以下のものとなっています。

コード:

#define M 257

int hash(char *v)
{
  int x;
  x = 0;
  while(*v){
    x = 256 * x + (*v++);
  }
  if(x < 0){
    x = (-x);
  }
  return(x % M);
}
この関数はどういう方法でハッシュ値を決めているのですか?
よろしくお願いします。

Re: ハッシュ関数の動作がわかりません。

Posted: 2013年6月19日(水) 10:51
by YuO
どういう方法,と問われてもコードそのものが方法なのですが……。
何がわからないのでしょうか。
# ハッシュ関数としての性質はよくないです。最後の数文字だけが結果に影響を及ぼすため。

Re: ハッシュ関数の動作がわかりません。

Posted: 2013年6月19日(水) 10:53
by usao
>どういう方法
と問われても,コードそのものがその答えだと思うので,質問をより具体的にすると良いかと思います.
(授業ではこのコードに関する説明などは無かったのでしょうか?
 何かしらあったのであれば「XXXだといわれたがその意味がわからん」みたいな聞き方をすれば
 詳しい人が解説してくれるかもしれません)

#signedで計算してるのは何かしらぐちゃぐちゃと値が混じることを期待している…のかなぁ??

Re: ハッシュ関数の動作がわかりません。

Posted: 2013年6月22日(土) 20:15
by たかし
みなさん、ありがとうございます。
質問があいまいだったため皆さんが答えにくくなってしまい、すみませんでした。
今回の課題ではハッシュ関数の中身は説明しなくてもいいみたいなので、とりあえず保留にしておきます。
皆さんありがとうございました。