演習問題 第3回 AVL木(2016、2018年度)
■ 実験用データ
整数集合: 集合の濃度(要素数): 1,000,000、 キーの型: 整数、 ファイル: integer1MR.dat
文字列集合: 集合の濃度(要素数): 100,000、 キーの型: 文字列、 ファイル: wordE100KR.dat
(文字列集合: 英単語集合)
■ 計測値出力単位
整数集合 U = 100,000 (要素数の1/10)
英単語集合 U = 10,000 (要素数の1/10)
探索要素集合の濃度 0.1U
■ 集合、パラメーター設定
・学籍番号の最下位桁の値によって、集合、パラメーター(探索値集合の開始番号)が異なります。
前半のグループ 後半のグループ
集合: 整数集合 集合: 文字列集合
番号 探索用集合 探索用集合
の開始番号 の開始番号
0: 1 1
1: 100000 10000
2: 200000 20000
3: 300000 30000
4: 400000 40000
5: 500000 50000
6: 600000 60000
7: 700000 70000
8: 800000 80000
9: 900000 90000
■ 留意事項
・誤った問題番号、誤った設定値でのレポートを提出は受理されません。
但し、他の除数、他のハッシュ増分に対する結果をレポート本文(提出する実行形式ファイルは上記の指定のみ)を含めることは認めます。
3a 二分探索木とAVL木の比較: 平衡化による高速化(比較回数の減少)の検証
◆ AVL木の構築と探索
(0) 探索用要素集合の配列を静的に宣言する。この配列の大きさは0.1Uで、型は上記指定のとおり。
(1) 指定された上記ファイルを読込み、AVL木を構築(add関数)する。
(2) ファイルポインターを先頭に戻す: rewind文(補足事項参照)。
(3) 指定された要素番号の直前まで、ファイルを空読みし、当該要素番号から要素を0.1U個分、(0)で宣言した配列に格納する(補足事項参照)。
(4) この探索用要素配列(成功探索)から要素を取り出し、(1)で構築したAVL木に対して探索する。この探索(search)を0.1U回行うが、0.01U毎に以下の項目を計測し、print出力する。
(a)総比較回数、 (b)探索時間
-------------------------------------------------------
10U要素のAVL木に対する1U個の探索操作
要素数 総比較回数 探索時間(msec)
0.01U ******* ***.***
0.02U ******* ***.***
0.03U ******* ***.***
・・・・・
・・・・・
0.09U ******* ***.***
0.10U ******* ***.***
-------------------------------------------------------
◆ 二分探索木の構築と探索
二分探索木について、上述したAVL木と同様の操作を行う。
AVL木と二分探索木の2つの計測結果を比較し、様々な観点から分析せよ。なお、提出exeファイルは、AVL木の生成-探索main関数のexeファイルだけでよい
◆演習問題プログラム作成における注意事項
下記の要件を必ず満たすようにプログラムを作成せよ。
(1) 最初に読み込むファイル名は絶対パスとしてmainプログラム中で記述し、コマンドライン上の引数による指定、およびリダイレクトによる入力指定はしないこと。
例.char infile[80] = "/home/algorithm_data/texte.dat" ;
(2) 探査回数、実行時間等、測定結果をプログラムの最後に出力する。