1.やさしい
ハッシュテーブルの負荷率(load factor)とは何ですか。
- A格納された要素の数をバケットの数で割ったもの
- Bこれまでの衝突の数
- Cバケットの数を、格納されたキーの平均の長さで割ったもの
- Dディスクからテーブルを読み込むのに必要な時間
2.やさしい
木の高さは一般にどのように定義されますか。
- A根の子の数
- B根と葉をすべて含めた、木に含まれるノードの総数
- C木の葉の数
- D根から葉までの最も長い経路上の辺の数
3.やさしい
静的配列と動的配列の主な違いは何ですか。
- A静的配列はインデックスによるアクセスが遅い
- B動的配列は要素を連結されたノードに格納するので、1 つずつ拡張できる
- C静的配列は数値しか格納できない
- D動的配列は、より大きなメモリブロックに移ることで拡張できる
4.ふつう
2 つのスタックでキューを実装します。「in」スタックに push し、「out」スタックから pop し、「out」が空になったら「in」から補充します。1 回の操作あたりのならしコストはどれですか。
- AO(1)
- BO(n²)
- CO(log n)
- DO(n)
5.ふつう
同じ長さの連結リストを走査するより、配列を走査する方が実際にはずっと速いことが多いのはなぜですか。
- A配列の走査は全体で O(1)、連結リストの走査は O(n) だから
- B連結リストは常に要素をディスクに格納するから
- C配列の要素は連続しているので、CPU キャッシュを有効に使えるから
- D配列では値を比較する命令が少なくて済むから
6.ふつう
容量 n の配列に格納された循環キューで、インデックス i の次の位置はどのように計算されますか。
- A(i − 1) mod n
- Bi + 1
- C(i + 1) mod n
- D2i + 1
7.むずかしい
循環バッファでは、front == rear は空と満杯のどちらも意味しえます。これらを区別する一般的な方法はどれですか。
- Aバッファのサイズを 2 のべき乗にする
- Bfront と rear を同じ変数に格納する
- Cfront と rear が等しいときは常にバッファをクリアして、空の状態にする
- D要素数を別に保持するか、常に 1 つのスロットを使わずに残しておく
8.むずかしい
ハッシュテーブルが正しく動作するためには、ハッシュと等価性はどの規則に従わなければなりませんか。
- A異なるキーは異なるハッシュ値をもたなければならない
- Bハッシュ値が等しければキーも等しい
- Cハッシュ値は素数でなければならない
- D等しいキーは等しいハッシュ値をもたなければならない
解答
- 1. A · 格納された要素の数をバケットの数で割ったもの
- 2. D · 根から葉までの最も長い経路上の辺の数
- 3. D · 動的配列は、より大きなメモリブロックに移ることで拡張できる
- 4. A · O(1)
- 5. C · 配列の要素は連続しているので、CPU キャッシュを有効に使えるから
- 6. C · (i + 1) mod n
- 7. D · 要素数を別に保持するか、常に 1 つのスロットを使わずに残しておく
- 8. D · 等しいキーは等しいハッシュ値をもたなければならない
ステップごとの詳しい解答:このトピックは examproblems.com で練習できます。