演習問題 第5回 B木(2017、2019年度)
■ 実験用データ
整数集合: 集合の濃度(要素数): 1,000,000、 キーの型: 整数、 ファイル: integer1MR.dat
文字列集合: 集合の濃度(要素数): 100,000、 キーの型: 文字列、 ファイル: wordE100KR.dat
(文字列集合: 英単語集合)
■ 計測値出力単位
整数集合 U = 100,000 (要素数の1/10)
英単語集合 U = 10,000 (要素数の1/10)
■ 集合、パラメーター設定
・学籍番号の最下位桁の値によって、演習問題に対するパラメーター(KKの値)が異なります)
前半のグループ 後半のグループ
集合: 文字列集合 集合: 整数集合
番号 KKの値 KKの値
0: 4, 8, 12 24, 32, 48
1: 8, 12, 16 32, 48, 64
2: 12, 16, 24 48, 64, 96
3: 16, 24, 32 64, 96, 128
4: 24, 32, 48 96, 128, 192
5: 32, 48, 64 128, 192, 256
6: 48, 64, 96 192, 256, 384
7: 64, 96, 128 256, 384, 512
8: 96, 128, 192 384, 512, 768
9: 128, 192, 256 512, 768, 1024
■ 留意事項
・誤った集合、誤った設定値でのレポートは受理されません。
5a B木の記憶効率
指定されたファイルを読込み、B木を生成する(追加関数)。次数Kを上記のように設定する。1U, 2U, ・・・・・、9U、10Uレコード読み込んだときの各時点で、次の項目を測定する。
高さ、ノード数、最大要素数、構築時間
ここで、最大要素数とは格納可能最大要素数であり、ノード数×KK の値である。B木の木の高さの算出方法は、第4回の演習問題のプログラムコードと同様である。
上記の項目を指定された次数kについて計測し、以下のような書式で出力する。
KK = **のとき
要素数 高さ ノード数 最大要素数 構築時間(msec.)
----------------------------------------------------------
1U ・ ・ ・ ・ ・
2U ・ ・ ・ ・ ・
・ ・ ・ ・ ・
・ ・ ・ ・ ・
9U ・ ・ ・ ・ ・
10U ・ ・ ・ ・ ・
提出プログラムのメイン関数は、特定のKだけについてB木を生成し、上記書式で出力する仕様とし、その時のKKの値は3つのうちの最大の値とする(1つのメイン関数の中で、3つの異なったKについてB木を連続して生成する必要は無い)。言い換えれば、3つの異なったKについて、3回コンパイル−実行し、レポートには、3種類のKKについて上記書式の出力結果が記載されるものとする。
記憶効率の観点から、本課題の結果と演習課題4aの結果と対比し、様々な観点から分析せよ。上記以外の項目も測定することが期待される。
5b 巡回関数(横型巡回)の作成(選択課題)
上記の整数集合ファイルを読み込み、B木を構築する(追加関数)。このとき、B木において、次数 K = 4とする(KK = 8)。次の巡回関数を作成する。
void Out_Tree_H(NODE *) : 横型巡回(最左端→最右端)
構築したB木に対しこの関数を適用し、根を含む24個の節について、節内の要素を出力する。出力する際に、節内の要素の開始と終了を示すために次のprintf文を含むものとする。
節内の要素の開始: printf("< ")
節内の要素の終了: printf("> \t")
また、各レベルの最右端の節内の要素が出力された後、次のレベルの節を出力する前に改行(リターン)されるものとする。
レポートの内容としては、作成した関数のアルゴリズムおよびプログラムコードについての明確かつ詳細な説明を含むものとする。