0

Longest Common Subsequence 問題を解決するためのコードを作成しました。m X w 次元の 2D テーブルを定義する必要があるだけです。グローバル変数として定義しましたが、容量超過エラーがスローされました。

#define FOR(i,n) for( i = 0; i < n ; ++ i)
int LCS(const char M[],int m, const char W[], int w)
{
    // m length of M w length of W
    int ans,min,i,j;
    // lcs table needs to be defined with required dimensions 
    min = ( m >= w ) ? w : m;

    FOR(i,m)
        FOR(j,w)
        {
            if (i == 0 || j == 0)
                lcs[i][j] = 0; // repetitive
            else if (M[i] == W[j] )
                lcs[i][j] = lcs[i-1][j-1] + 1;
            else
                lcs[i][j] = max(lcs[i-1][j],lcs[i][j-1]);
        }

        return (min == lcs[m-1][w-1]);
}

ベクトルのベクトルを使用することを検討していますが、同時にサイズを mxw として定義することは可能ですか? 通常の

vector < vector <int> > lcs

ベクトルを事前に定義し、コードのように添字演算子を使用してアクセスしたいので、十分ではありません。

4

3 に答える 3

3

使用する

vector<vector<int>> lcs(m, vector<int>(w));

size の「ベクトルのベクトル」を作成しますm x w

これは、2 つのパラメーター std::vector コンストラクターのために機能します。

vector(size_type n, const value_type& val = value_type());

これはサイズnを最初のパラメーターとして取り、値valを 2 番目のパラメーターとして取るため、mのコピーvector<int>(w)、つまりsize のmコピーがあります(デフォルト値は 0 です)。vector<int>wint()

参考文献

于 2013-05-11T21:45:20.220 に答える
2
std::vector< std::vector<int> > lcs( m, std::vector<int>( w ) );
于 2013-05-11T21:44:47.883 に答える
1

はい、すべての内部ベクトルが同じサイズでなければなりません。

std::vector< std::vector<int> > v(9000, std::vector<int>(9000, 23));

最初の引数はcount(最初に にあるオブジェクトの数vector) で、2 番目の引数はそれぞれの初期化に使用される値です。上記の場合、それぞれが 23 の 9000 倍で満たされた 9000 個のベクトルになります。

vectorコンストラクターの完全なリストはこちらです。

于 2013-05-11T21:46:02.040 に答える