最长公共子序列_第4页

考试站(www.examzz.com)   【考试站:中国教育考试第一门户】   2013年8月14日
 i=m,j=n;

  while(1)

  {if(i==0││j==0)   break;

  if(b[i][j]== '\\ '){

  temp[h++]=x[i];   //反序记录最长公共子序列到temp中

  i=i-1,j=j-1;

  }

  else

  if(b[i][j]== '│ ')

  i=i-1;

  else

  j=j-1;}

  cout < < "\nx[ " <

  for(i=h-1;i> =0;i--)   //格式化输出最长公共子序列

  if(i==h-1)

  if(h==1)

  cout < < "LCS: < " <

  else

  cout < < "LCS: < " <

  else

  if(i==0)

  cout < < ", " <

  else

  cout < < ", " <

  cout < < "\n " <

  }

  三、运算结果

  其实它的最长公共子序列不止一个,这里只输出了其中的一个。

  四、总结分析

  在这个具体的算法中,还有可以改进的地方,比如在具体的求最大公共子序列中,可以不必要MAX的宏定义,只需将各数组设为具体的长度就可以节约不少的空间,大大降低程序的空间复杂度,但是为了键盘输入任意字符串,牺牲了很多的内存空间。在键盘输入字符串时,可以不用循环赋值,直接用 cin> > x;cin> > y;这样就可以将这部分的时间复杂度从O(m+n)降到O(2),但有一个相关的问题没解决,所以我没这样赋值。程序总的时间复杂度为:O(mn+3m+ 3n).


首页 1 2 3 4 尾页

相关文章