ホームページ > バックエンド開発 > C++ > C プログラムでの LCS のスペースを最適化したソリューション?

C プログラムでの LCS のスペースを最適化したソリューション?

王林
リリース: 2023-09-05 13:45:06
転載
885 人が閲覧しました

C プログラムでの LCS のスペースを最適化したソリューション?

ここでは、LCS 問題の空間最適化手法を見ていきます。 LCS は最長の共通部分列です。 2 つの文字列が「BHHUBC」と「HYUYBZC」の場合、サブシーケンスの長さは 4 です。動的プログラミング手法はすでにその 1 つですが、動的プログラミング手法を使用するとさらに多くのスペースが必要になります。次数 m x n のテーブルが必要です。ここで、m は最初の文字列の文字数、n は 2 番目の文字列の文字数です。

ここでは、O(n) 補助スペースの使用方法を学びます。古いアプローチを見ると、各反復で前の行のデータが必要であることがわかります。すべてのデータが必要なわけではありません。したがって、サイズ 2n のテーブルを作成しても問題ありません。この考え方を理解するためにアルゴリズムを見てみましょう。

アルゴリズム

lcs_problem(X, Y) -

begin
   m := length of X
   n := length of Y
   define table of size L[2, n+1]
   index is to point 0th or 1st row of the table L.
   for i in range 1 to m, do
      index := index AND 1
      for j in range 0 to n, do
         if i = 0 or j = 0, then
            L[index, j] := 0
         else if X[i - 1] = Y[j - 1], then
            L[index, j] := L[1 – index, j - 1] + 1
         else
            L[index, j] := max of L[1 – index, j] and L[index, j-1]
         end if
      done
   done
   return L[index, n]
end
ログイン後にコピー

#include <iostream>
using namespace std;
int lcsOptimized(string &X, string &Y) {
   int m = X.length(), n = Y.length();
   int L[2][n + 1];
   bool index;
   for (int i = 0; i <= m; i++) {
      index = i & 1;
      for (int j = 0; j <= n; j++) {
         if (i == 0 || j == 0)
            L[index][j] = 0;
         else if (X[i-1] == Y[j-1])
            L[index][j] = L[1 - index][j - 1] + 1;
         else
            L[index][j] = max(L[1 - index][j], L[index][j - 1]);
      }
   }
   return L[index][n];
}
int main() {
   string X = "BHHUBC";
   string Y = "HYUYBZC";
   cout << "Length of LCS is :" << lcsOptimized(X, Y);
}
ログイン後にコピー

出力

Length of LCS is :4
ログイン後にコピー

以上がC プログラムでの LCS のスペースを最適化したソリューション?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:tutorialspoint.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート