首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于一维数组的LCS动态规划

基于一维数组的LCS动态规划
EN

Stack Overflow用户
提问于 2016-03-17 12:33:21
回答 2查看 811关注 0票数 0

我试图通过动态编程来寻找LCS的长度。我用了二维数组。但是对于一个大字符串,它会由于内存溢出而导致运行时错误。请告诉我,我应该如何在一维数组,以避免内存限制。

代码语言:javascript
复制
#include<bits/stdc++.h>
 #include<string.h> 
 using namespace std;
int max(int a, int b);
int lcs( string X, string Y, int m, int n )
{
   int L[m+1][n+1];
   int i, j;
   for (i=0; i<=m; i++)
   {
     for (j=0; j<=n; j++)
     {
       if (i == 0 || j == 0)
         L[i][j] = 0;

       else if (X[i-1] == Y[j-1])
         L[i][j] = L[i-1][j-1] + 1;

       else
         L[i][j] = max(L[i-1][j], L[i][j-1]);
     }
   }

   return L[m][n];
}

int max(int a, int b)
{
    return (a > b)? a : b;
}

int main()
{
  string X;
  string Y;
  cin>>X>>Y;
  int m = X.size();
  int n = Y.size();

  printf("Length of LCS is %d\n", lcs( X, Y, m, n ) );

  return 0;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-17 12:41:12

注意,lcs中的递归只使用L矩阵的最后两行。因此,您可以轻松地重写您的解决方案以使用O(N)内存。

这是一个关于这个问题的好文章

票数 5
EN

Stack Overflow用户

发布于 2016-03-17 12:40:37

无论如何,二维数组都是虚构的,它仍然是一维数组,所以自己计算索引,例如:数组int L(n+1)_(m+1)和Li = Li_(n+1)+j的索引

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36060673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档