Skip to main content
QUICK REVIEW

[論文レビュー] Computing the Number of Longest Common Subsequences

Ronald I. Greenberg|ArXiv.org|Jan 29, 2003
Algorithms and Data Compression参考文献 8被引用数 5
ひとこと要約

本稿では、2つの文字列間の異なる最長共通部分列(LCS)の数およびLCSの埋め込みの数を計算するための最適化されたO(mn)時間およびO(m)空間の動的計画法アルゴリズムを提示する。従来の手法を単純化するために、経路再構築を通じてカウントを追跡する下向きの再帰的関係を用い、すべての解を明示的に保存することなく、効率的な列挙を可能にしている。

ABSTRACT

This note provides very simple, efficient algorithms for computing the number of distinct longest common subsequences of two input strings and for computing the number of LCS embeddings.

研究の動機と目的

  • 2つの文字列間の異なる最長共通部分列(LCS)の数を、単純で効率的なアルゴリズムで数えること。
  • LCSの埋め込みの数—すなわち、入力文字列におけるLCSの異なる位置マッピングの数—を数える方法を拡張すること。
  • 両方のタスクにおいて、O(mn)時間計算量を維持したまま、空間計算量をO(m)に削減すること。
  • 従来のLCSカウント用の動的計画法スキームを単純化し、余分な計算や保存を排除すること。

提案手法

  • 標準的な再帰的ルールに従い、A[1..i]およびB[1..j]のプレフィックスのLCS長を計算するための動的計画法テーブルL[i,j]を用いる。
  • 前回の状態からの有効な経路を集約することで、それぞれ異なるLCSの数またはLCSの埋め込みの数をカウントするための、2番目のテーブルD[i,j]またはE[i]を維持する。
  • 同じLCS長に寄与する場合にのみ、上(L[i-1,j])および左(L[i,j-1])からのカウントを加算し、必要に応じて重複分を差し引く再帰的ルールを適用する。
  • 現在と直前の列のみを保存することで、メモリ使用量をO(m)に削減する空間最適化を実施する。
  • 完全な配列を保存しないで、一時変数(newL, newE, oldL, oldE)を用いて、ローリング方式で値を反復的に更新する。
  • 更新ステップにおける条件分岐を調整することで、異なるLCSの数のカウントと埋め込みの数のカウントの間で、わずかに論理を切り替える。

実験結果

リサーチクエスチョン

  • RQ1すべての可能なLCSを列挙するよりも、異なる最長共通部分列の数をより効率的に計算することは可能か?
  • RQ2LCSの埋め込みの数を計算するための最小空間計算量は何か?
  • RQ3異なるLCSの数と埋め込みの数を統一的かつ空間効率的なフレームワークでカウントするための動的計画法の再帰的関係をどのように単純化できるか?
  • RQ4すべての埋め込みを明示的に生成せずに、LCSの埋め込みの数を計算することは可能か?

主な発見

  • アルゴリズムは、O(mn)時間およびO(m)空間で異なるLCSの数を計算でき、標準的なLCS長の計算と同等の時間計算量を達成している。
  • 同じフレームワークを用いることで、同一の時間および空間制約のもとでLCSの埋め込みの数も効率的に計算できる。
  • 完全なDPテーブルを保存しないで、常に2つの列のみを保持することで、メモリ使用量を顕著に削減している。
  • 重複分の補正を差し引くことで、同じLCS長をもたらす有効な直前ノード(上と左)からの寄与を合算することで、異なるLCSの数が計算されている。
  • 空文字列のような端的なケースを正しく処理しており、その場合のカウントは常に1(空の部分列)である。
  • すべての解を保存するか、より複雑なデータ構造を用いる必要がある従来の手法よりも、本手法は単純かつ効率的である。

より良い研究を、今すぐ始めましょう

論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。

クレジットカード登録不要

このレビューはAIが作成し、人間の編集者が確認しました。