演習問題 第1回 ハッシュ法(2017、2019年度)
■ 実験用データ
整数集合: 集合の濃度(要素数): 1,000,000、 キーの型: 整数、 ファイル: integer1MS.dat
文字列集合: 集合の濃度(要素数): 100,000、 キーの型: 文字列、 ファイル: wordE100KS.dat
(文字列集合: 英単語集合)
■ 計測値出力単位
整数集合 U = 100,000 (要素数の1/10)
英単語集合 U = 10,000 (要素数の1/10)
■ 集合、パラメーター設定
・学籍番号の最下位桁の値によって、集合、パラメーター(除数、線形探査法のハッシュ増分(CONSL)、等)が異なります。
前半のグループ 後半のグループ
集合: 整数集合 集合: 文字列集合
番号 除数 CONSL 除数 CONSL
0: 999983 19 99991 19
1: 999983 23 99989 23
2: 999979 29 99971 29
3: 999979 31 99929 31
4: 999961 37 99929 37
5: 999961 41 99923 41
6: 999959 43 99907 43
7: 999959 47 99901 47
8: 999953 53 99881 53
9: 999953 59 99877 59
■ 留意事項
・誤った問題番号、誤った設定値でのレポートを提出は受理されません。
但し、以下のように、分析内容を拡張することは認めます。
問題番号1a: 他の除数でも算出する。
1a ハッシュ法における衝突の問題
ハッシュ法の主要問題である衝突の状況を調査する。ここでいう「衝突」とは、ハッシュ値が一致する現象だけを指す(探査関数で空番地を見つける過程での衝突は含まない)。 ハッシュ表の生成時に、次に挙げる項目を調べる(調査項目については、テキストp.8〜9に具体的に記述されている)。
(a) 衝突が生ずる番地の総数
(b) 衝突が起きたキーの総数
(c) 最大同族数、最小同族数、平均同族数
指定されたファイルを読み込み、開放番地法でハッシュ表を生成(store関数)する過程で上記指標を測定し、9Uレコード読み込んだ毎に出力(print)する。出力書式のイメージは以下のとおり。
衝突番地数 衝突キー総数 最大同族数、最小同族数、平均同族数
1U ・ ・ ・ ・ ・ ・ ・ ・ ・ ・
2U ・ ・ ・ ・ ・ ・ ・ ・ ・ ・
・ ・ ・ ・ ・ ・ ・ ・ ・ ・
・ ・ ・ ・ ・ ・ ・ ・ ・ ・
9U ・ ・ ・ ・ ・ ・ ・ ・ ・ ・
10U ・ ・ ・ ・ ・ ・ ・ ・ ・ ・
上記の測定結果について、様々な観点から分析せよ。