データ構造・計算量解析(Big-O記法)・基本アルゴリズム

基礎的なプログラミング知識を前提とする大学学部レベルの復習。配列、リスト、ハッシュ、木、ヒープ、トライ、Union–Find、ブルームフィルタ、計算量を扱う32枚。

Level
basic
Languages
ja → ja
Cards
32
Markdown
データ構造・計算量解析(Big-O記法)・基本アルゴリズム (.md)

Flashcards (32)

#Front (Term / Question)Back (Definition / Answer)ExampleMultiple-Choice Options
1循環配列キューは、取り出し後の要素移動をどう避けるか?先頭・末尾の添字を容量で剰余を取りながら循環させる。取り出しは先頭添字を進めるため、他の要素を動かさず空き領域を再利用できる。
2二分木の先行順・中間順・後行順の走査順序は?先行順:ノード → 左 → 右。中間順:左 → ノード → 右。後行順:左 → 右 → ノード。
3n 個の要素からボトムアップでヒープを構築するコストは?O(n)。大半のノードは葉に近く、下方への調整が少ない。ノードの高さ別に仕事量を足すと全体は線形になる。
4長さ n、添字が0始まりのヒープ配列で、ノード i の親と子はどこか?親:i>0 のとき ⌊(i−1)/2⌋。子:2i+1 と 2i+2。ただし添字が n 未満の場合のみ。添字0には親がない。
5経路圧縮とランクによる併合を使う union/find の償却コストは?1操作あたり O(α(n))。α は逆アッカーマン関数、n は要素数。初期化は O(n)。これは操作列に対する評価であり、各呼び出しの最悪コストが定数という意味ではない。
6表の検索用ハッシュ関数に必要な性質は?決定的で、想定するキーをよく分散させること。固定長キーの計算は O(1) にできるが、新しい L 文字の文字列のハッシュ計算は通常 O(L)。
7分離連鎖法はハッシュ衝突をどう解決するか?各バケットが、その添字に対応する項目の集合を保持する。連結リストを使うことが多い。同じバケットの異なるキーも別々の項目として残る。
8異なるキーを持つ BST を中間順に走査すると何が得られるか?すべてのキーが厳密な昇順で得られる。n ノードを O(n) 時間で訪問する。
9ハッシュ表の負荷率とは何か。また、なぜサイズを変更することがあるか?α = n/m。n は項目数、m はバケット数またはスロット数。実装の閾値を超えると拡大・再ハッシュする場合がある。0.75 は共通の規則ではない。
10双方向連結リストで、与えられたノードを O(1) で削除できるのはなぜか?前後へのリンクで隣接ノードを直接つなぎ直せる。必要なら先頭・末尾を更新する。直前のノードを探す必要はない。
11互いに素な集合のデータ構造で find と union は何をするか?find(x) は x の属する集合の代表を返す。union(x,y) は異なる集合なら併合する。すでに同じ集合なら分割は変わらない。
12キューの取り出し規則と典型的な操作コストは?FIFO:末尾に追加し先頭から取り出す。先頭・末尾リンクや固定容量のリングバッファなら両方 O(1)。配列要素をずらす実装では取り出しが O(n)。
13経路圧縮・ランクによる併合・サイズによる併合はどう違うか?経路圧縮は訪問したノードを根に付け替える。ランク併合は低ランクの根を高ランクの根の下へ、サイズ併合は小集合を大集合の下へつなぐ。ランクは現在の高さとは限らない。
14二分最小ヒープを定義する2つの性質は?完全二分木であり、親のキーは子のキー以下である。したがって根には最小値がある。
15AVL 挿入後の左・右型の不均衡はどう直すか?まず左の子を左回転し、次に不均衡なノードを右回転する。
16固定長配列の添字アクセスが O(1) なのはなぜか?同じ大きさの領域が連続しており、アドレス(i) = 先頭アドレス + i·要素領域の大きさ で求まる。アドレス計算が定数時間であると仮定する。
17容量を倍増させる動的配列で、末尾追加の償却コストはいくらか?1回あたり O(1)。サイズ変更1回は O(n) になり得るが、空の配列から n 回追加する合計は O(n)。
18二分ヒープの挿入・根の削除・根の参照にかかるコストは?配列のサイズ変更が不要なら、それぞれ O(log n)、O(log n)、O(1)。サイズ変更は O(n) になり得る。
19BST の検索・挿入・削除は高さ h にどう依存するか?O(h) かかる。平衡木なら h = O(log n)、鎖状なら h = O(n)。期待 O(log n) にはランダムな挿入順などの仮定が必要。
20n → ∞ のとき、増加の遅い順に並べよ:n!、n、1、n²、log n、2ⁿ、n log n。漸近的には 1 < log n < n < n log n < n² < 2ⁿ < n!。
21トライとは何か。L 文字のキーの検索が O(L) になる条件は?文字の経路にキーを格納する接頭辞木で、完全なキーの終端を印で示す。次の文字への各遷移が O(1) なら、検索は O(L)。
22AVL 木の平衡条件は?各ノードで 高さ(左) − 高さ(右) ∈ {−1, 0, 1}。BST の順序不変条件も満たす。
23単方向連結リストと動的配列の先頭挿入・添字アクセスを比較せよ。リスト:先頭挿入 O(1)、添字アクセス O(n)。配列:先頭挿入 O(n)、添字アクセス O(1)。配列の先頭挿入では要素をずらす。
24二分木のレベル順走査はどう行うか?FIFO キューで深さごとに訪問する。左の子を右の子より先にキューへ追加すると、各段で左から右の順になる。
25非負の関数 f と g について、f(n) ∈ O(g(n)) は何を意味するか?ある定数 c > 0 と n₀ ≥ 0 が存在し、すべての n ≥ n₀ で f(n) ≤ c·g(n) が成り立つ。
26挿入だけを許すブルームフィルタは、どのような答えを返すか?陰性なら未挿入、陽性なら挿入済みの可能性がある。ハッシュでビット配列のビットを立てるため、偽陽性はあり得るが、状態が損なわれていなければ偽陰性はない。
27キーがすべて異なる二分探索木(BST)の順序不変条件は?各ノードについて、左部分木のキーはすべて小さく、右部分木のキーはすべて大きい。この規則が再帰的に成り立つ。
28赤黒 BST の平衡を保つ色の規則は?ノードは赤か黒。根と NIL 葉は黒。赤いノードに赤い子はない。各ノードからその子孫の NIL 葉へのすべての経路で黒いノード数が等しい。これにより高さは O(log n) に抑えられる。
29オープンアドレス法の線形探査と二次探査はどう違うか?項目は配列内に置く。表の大きさ m、初期添字 h に対し、それぞれ (h+i) mod m、(h+c₁i+c₂i²) mod m を調べる。二次探査には適切なパラメータが必要。
30分離連鎖法のハッシュ表における期待コストと最悪コストは?負荷が有界で、ハッシュがよく分散し、キー操作が定数時間なら検索・削除の期待値は O(1)。容量を幾何的に増やす挿入は期待償却 O(1)。n 個の衝突キーが連鎖すると O(n) になり得る。
31O、Ω、Θ はどう違うか?それぞれ漸近的な上界、下界、タイトな上下界を表す。対象は指定されたコスト関数であり、O 自体が最悪ケースを意味するわけではない。
32スタックはどう動作し、操作が O(1) になるのはいつか?LIFO:最後に入れた要素を最初に取り出す。連結リストの先頭なら push・pop・先頭の参照は O(1)。配列のサイズ変更を伴う1回の push は O(n) になり得る。