データ構造とアルゴリズム:直前対策パック

公式集、全トピックの解法の要点、6 問の演習問題。完全な解答は巻末にあります。

新しい問題科目に戻る

印刷ウィンドウで「PDF として保存」を選ぶと、コピーを端末に保存できます。

1公式と解法

グラフ理論

握手補題
Σ deg(v) = 2|E|
完全グラフ
|E(Kn)| = n(n − 1)/2, |E(Km,n)| = m·n
正則グラフ
|E| = n·k/2
木と森
|E| = n − 1, |E| = n − c
木の葉
L = 2 + Σ (deg(v) − 2) over deg(v) ≥ 3
オイラー
閉路:すべての次数が偶数; 路:奇数次数がちょうど 2 つ
Kn のハミルトン閉路
(n − 1)!/2
ダイクストラ法の更新
d(v) = min(d(v), d(u) + w(u, v))
長さ L の歩道
(Mᴸ)ij

解き方

  1. 各頂点の次数を書き出します。次数の総和は辺の数の 2 倍になります。
  2. オイラーの問題では、グラフが連結であることを確かめ、奇数次数の頂点を数えます。
  3. 木では、辺が n − 1 本であることと握手補題を使います。
  4. ダイクストラ法では、暫定距離の表をつくり、毎回、未確定の頂点のうち最小のものを確定します。
  5. 最小全域木では、辺を重みの順に並べ、閉路をつくる辺を飛ばす方法(クラスカル法)か、始点から 1 本の木を成長させる方法(プリム法)を使います。

2演習問題

1.アルゴリズムと計算量ふつう

貪欲法(greedy algorithm)の説明として正しいものはどれですか?

  1. A再帰のみを使用する
  2. B各ステップで局所的に最良の選択をする
  3. C可能なすべての解を試す
  4. D常に最適解を与える
2.アルゴリズムと計算量むずかしい

クラス NP の定義として正しいものはどれですか?

  1. A多項式でない問題
  2. B証拠(certificate)が与えられれば、「はい」の答えを多項式時間で検証できる決定問題
  3. Cどのアルゴリズムでも解けない問題
  4. D多項式時間で解けない問題
3.データ構造ふつう

二分ヒープをポインタなしで配列に格納できるのはなぜですか。

  1. A完全二分木なので、位置が単純なインデックスの式に従うから
  2. Bヒープは 100 個を超える要素を含むことがないから
  3. C配列は自動的にキーをソート順に保つので、ポインタが不要になるから
  4. Dヒープのすべてのキーは等しいから
4.データ構造むずかしい

get と put が O(1) の LRU(least recently used)キャッシュを実現できるデータ構造はどれですか。

  1. Aスタックのみ
  2. Bハッシュマップと双方向連結リストの組み合わせ
  3. C単一のソート済み配列
  4. D二分探索木のみ
5.グラフ理論ふつう

木に 次数 3 の頂点が 4 個, 次数 4 の頂点が 4 個, 次数 2 の頂点が 2 個 があり、ほかのすべての頂点は葉(次数 1)です。葉は何枚Lありますか?

4 × deg 34 × deg 42 × deg 2
L =
6.グラフ理論むずかしい
10211211395312ABCDEFG

ダイクストラ法を使って、重み付きグラフで A から F までの最短経路の長さd(F)を求めてください。

始点:A終点:F
d(F) =

3溶液

1.アルゴリズムと計算量

答え: B · 各ステップで局所的に最良の選択をする

これが答えになる理由

貪欲法は高速で、一部の問題(例:Dijkstra、Huffman 符号化)では最適ですが、一般にはそうではありません(例:ある硬貨体系での両替問題)。

答え

B · 各ステップで局所的に最良の選択をする
2.アルゴリズムと計算量

答え: B · 証拠(certificate)が与えられれば、「はい」の答えを多項式時間で検証できる決定問題

これが答えになる理由

NP の問題では、たとえば与えられた割り当てがブール式を充足することの確認のように、提案された解(証拠)をすばやく検証できます。

答え

B · 証拠(certificate)が与えられれば、「はい」の答えを多項式時間で検証できる決定問題
3.データ構造

答え: A · 完全二分木なので、位置が単純なインデックスの式に従うから

これが答えになる理由

完全であることは隙間がないことを意味するので、インデックス i の子は常に 2i + 1 と 2i + 2 にあります。

答え

A · 完全二分木なので、位置が単純なインデックスの式に従うから
4.データ構造

答え: B · ハッシュマップと双方向連結リストの組み合わせ

これが答えになる理由

ハッシュマップでノードを O(1) で見つけ、双方向連結リストでアクセスした要素を先頭へ移動し、末尾から追い出す処理を O(1) で行います。

答え

B · ハッシュマップと双方向連結リストの組み合わせ
5.グラフ理論

答え: L = 14

オイラー、ハミルトン、木:連結グラフは、すべての頂点の次数が偶数のときオイラー閉路(すべての辺を 1 回ずつ通って始点に戻る)をもち、ちょうど 2 つの頂点の次数が奇数のとき、閉路でないオイラー路をもちます。その路は、一方の奇数次数の頂点から他方へ通ります。ハミルトン閉路はすべての頂点を 1 回ずつ訪れ、Kn には (n − 1)!/2 個あります。n 個の頂点をもつ木には n − 1 本の辺があり、m 本の辺をもつ連結グラフは、m − n + 1 本の辺を取り除いても全域木が残ります。

木の握手補題

L + 32 = 2(L + 10) − 2
L = 14

答え

L = 14

近道:次数 d ≥ 3 の頂点について L = 2 + Σ (d − 2) です。

6.グラフ理論

答え: d(F) = 20

最短経路と全域木:ダイクストラ法は毎ラウンド 1 つの頂点を確定します:暫定距離が最小の未確定の頂点です。その距離は最終となり、各隣接頂点 v は d(v) = min(d(v), d(u) + w(u, v)) と更新されます。クラスカル法は、辺を軽い順に取り、閉路をつくる辺を飛ばして最小全域木をつくります。プリム法は、始点から 1 本の木を成長させ、その木から出る最も軽い辺を常に加えます。n 個の頂点の全域木には n − 1 本の辺があります。

ダイクストラ法をラウンドごとに

各行:確定した頂点、その最終距離、距離が改善される隣接頂点。

A (0): B: 10, C: 2
C (2): G: 7
G (7): D: 10, E: 19
B (10)
D (10): E: 11, F: 23
E (11): F: 20
F (20)

最短経路

A → C → G → D → E → F
d(F) = 20

答え

d(F) = 20

ExamProblems · examproblems.com/courses/data-structures-and-algorithms