Longest Common Subsequence

最長共通部分列(さいちょうきょうつうぶぶんれつ) (LCS) - 動的計画法(どうてきけいかくほう)典型問題(てんけいもんだい)

1. 動的計画法 (Dynamic Programming)

  • 時間計算量(じかんけいさんりょう) : O(m * n) LCS を計算(けいさん) する(もっと)一般的(いっぱんてき)解法(かいほう) 。ここで mn はそれぞれ2つの文字列(もじれつ)(なが) さ。m * n の DP テーブルを計算(けいさん) し、(かく) セルを() める必要(ひつよう) がある。

  • 空間計算量(くうかんけいさんりょう) : O(m * n) 各部分問題(かくぶぶんもんだい)(かい)格納(かくのう) するために m * n の DP テーブルが必要(ひつよう)


2. 空間最適化動的計画法 (Space Optimized DP)

  • 時間計算量(じかんけいさんりょう) : O(m * n) 基本的(きほんてき)動的計画法(どうてきけいかくほう)(おな) じだが、現在(げんざい)(まえ)(ぎょう)情報(じょうほう) のみを保持(ほじ)

  • 空間計算量(くうかんけいさんりょう) : O(min(m, n)) 通常(つうじょう) 2(ぎょう) で DP テーブルを表現(ひょうげん) し、交互(こうご)更新(こうしん)


3. 再帰 (Recursive)

  • 時間計算量(じかんけいさんりょう) : O(2^(m + n)) (もっと)直接的(ちょくせつてき)解法(かいほう)各再帰(かくさいき) で2つの選択肢(せんたくし) があり、指数的(しすうてき)時間計算量(じかんけいさんりょう) になる。

  • 空間計算量(くうかんけいさんりょう) : O(m + n) 再帰(さいき)(ふか) さが最大(さいだい) m + n なので、空間計算量(くうかんけいさんりょう)再帰(さいき)(ふか) さ。


4. バックトラッキング (Backtracking)

  • 時間計算量(じかんけいさんりょう) : O(2^(m + n)) 純粋(じゅんすい)再帰解法(さいきかいほう)同様(どうよう)

  • 空間計算量(くうかんけいさんりょう) : O(m + n) バックトラック処理(しょり)経路(けいろ)格納(かくのう) するための追加空間(ついかくうかん)使用(しよう)


5. メモ化再帰 (Memoization / Top-Down DP)

  • 時間計算量(じかんけいさんりょう) : O(m * n) 動的計画法(どうてきけいかくほう)(おな) じ。メモを使用(しよう) して重複計算(じゅうふくけいさん)回避(かいひ)

  • 空間計算量(くうかんけいさんりょう) : O(m * n) メモを格納(かくのう) するために追加(ついか)m * n 空間(くうかん)必要(ひつよう)


6. 行列法 (Matrix Method)

  • 時間計算量(じかんけいさんりょう) : O(m * n) 基本的(きほんてき)動的計画法(どうてきけいかくほう)(おな) じ。

  • 空間計算量(くうかんけいさんりょう) : O(m * n)


Summary

解法(かいほう)時間計算量(じかんけいさんりょう)空間計算量(くうかんけいさんりょう)
動的計画法(どうてきけいかくほう)O(m * n)O(m * n)
空間最適化(くうかんさいてきか) DPO(m * n)O(min(m, n))
再帰(さいき)O(2^(m + n))O(m + n)
バックトラッキングO(2^(m + n))O(m + n)
メモ化再帰(かさいき)O(m * n)O(m * n)
行列法(ぎょうれつほう)O(m * n)O(m * n)
  • 動的計画法(どうてきけいかくほう) (もっと)一般的(いっぱんてき)効率的(こうりつてき)解法(かいほう)
  • 空間最適化(くうかんさいてきか) DP時間計算量(じかんけいさんりょう)影響(えいきょう)(あた) えずに空間消費(くうかんしょうひ)大幅(おおはば)削減(さくげん)
  • 再帰(さいき) バックトラッキング時間効率(じかんこうりつ)(ひく) く、小規模入力(しょうきぼにゅうりょく)問題理解(もんだいりかい) のための簡単(かんたん) なデモに(てき) している