ホームページ > バックエンド開発 > C++ > C++ で最長共通部分列アルゴリズムを使用する方法

C++ で最長共通部分列アルゴリズムを使用する方法

WBOY
リリース: 2023-09-19 15:54:35
オリジナル
1041 人が閲覧しました

C++ で最長共通部分列アルゴリズムを使用する方法

C で最長共通部分列アルゴリズムを使用する方法

最長共通部分列 (LCS) は、2 つの文字列内で最長の同一部分列を見つける共通文字列マッチング問題です。 C では、動的プログラミング (Dynamic Programming) を使用して LCS 問題を解決できます。

以下は、最長共通部分列アルゴリズムの使用方法を示す C コードの例です:

#include <iostream>
#include <vector>
#include <string>

using namespace std;

string longestCommonSubsequence(string text1, string text2) {
    int m = text1.size();
    int n = text2.size();
    
    // 创建一个二维数组来存储中间结果
    vector<vector<int>> dp(m+1, vector<int>(n+1, 0));
    
    // 进行动态规划,填充数组
    for (int i = 1; i <= m; i++) {
        for (int j = 1; j <= n; j++) {
            // 如果当前字符相等,则在之前的基础上加1
            if (text1[i-1] == text2[j-1]) {
                dp[i][j] = dp[i-1][j-1] + 1;
            } else {
                // 如果当前字符不相等,则取左边或上边的最大值
                dp[i][j] = max(dp[i-1][j], dp[i][j-1]);
            }
        }
    }
    
    // 根据dp数组构建最长公共子序列
    int i = m;
    int j = n;
    string lcs = "";
    while (i > 0 && j > 0) {
        if (text1[i-1] == text2[j-1]) {
            // 如果当前字符相等,则将字符加入最长公共子序列中
            lcs = text1[i-1] + lcs;
            i--;
            j--;
        } else {
            // 如果当前字符不相等,则根据dp数组移动指针
            if (dp[i-1][j] >= dp[i][j-1]) {
                i--;
            } else {
                j--;
            }
        }
    }
    
    return lcs;
}

int main() {
    string text1 = "ABCD";
    string text2 = "ACDF";
    
    string lcs = longestCommonSubsequence(text1, text2);
    
    cout << "最长公共子序列为:" << lcs << endl;
    
    return 0;
}
ログイン後にコピー

上記のコードでは、最初に動的プログラミングを使用して 2 次元配列を構築しますdp dp[i][j] は、text1 の最初の i 文字と text2 の最初の を表します。 j 文字で構成される最長の共通部分シーケンスの長さ。次に、dp 配列を使用して、動的プログラミングの結果に基づいて最長の共通部分列を構築します。最後に、最長の共通部分列を出力するだけです。

上記は、C で最長共通部分列アルゴリズムを使用する例です。動的プログラミングのアイデアを通じて、LCS 問題を効率的に解決し、2 つの文字列内の最長の共通部分列を見つけることができます。

以上がC++ で最長共通部分列アルゴリズムを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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