図表: グラフ・データ構造・オートマトン

BFS は距離ごとに層を広げる

BFS は距離ごとに層を広げる

BFS では、始点からの距離が短い順に頂点が発見される。無重みグラフで最短距離を求められる理由は、キューが距離層の順序を保つからである。

確認すべき不変条件:

キュー内の頂点は、すでに確定した距離 d または d+1 の層に属する。

Union-Find

Union-Find

Union-Find は、各集合を代表元で管理する。find(x)x が属する集合の代表元を返し、union(x, y) は代表元どうしを併合する。

理論上のポイントは、データ構造の状態が集合分割を表していることである。実装では木構造を使うが、意味論としては「同値関係の同値類」を管理している。

DFA

DFA

DFA は、現在状態と入力記号から次状態が一意に決まる。上の例では、状態は「これまでに読んだ 1 の個数の偶奇」だけを記憶している。

形式的には次の5つ組で定義する。

(Q, Σ, δ, q0, F)
記号 意味
Q 状態集合
Σ 入力アルファベット
δ 遷移関数
q0 初期状態
F 受理状態集合

NFA

NFA

NFA では、同じ状態・同じ入力記号から複数の遷移先があり得る。これはランダム選択ではない。可能な遷移をすべて同時に追跡し、受理状態へ到達する経路が一つでもあれば受理する。