688 :
デフォルトの名無しさん:
ハッシュ関数
(key[i]は,キーのi番目の文字がアルファベット順で何番目かを示すとする.)
int hash( int *key, int keysize)
{
int i;
int hashv;
hashv = *key ;
for( i = 1 ; i < keysize; i++) {
hashv = (( hashv*32)+key[i]) % TABLESIZE ;
}
return hashv ;
}
問1
TABLESIZEはどのような値が望ましいか.その理由を述べよ.(論述問題).
問2
どのような場合に異なるキーで同じアドレスが割り当てられる状況が生じるか?
また,そのような場合の対処法を2つ説明せよ.(論述問題).
問3
上のハッシュ関数を利用して,人の姓(last name)をキーにして姓名(first nameも含む)を表に格納するプログラムを書け.
必要に応じて上の関数を書き直してよい.
ハッシュ値の計算が正しく行われて,正しい位置にデータが格納されていることが確認できるように表示させること.