博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
动态规划——最长公共子序列(LCS)
阅读量:6417 次
发布时间:2019-06-23

本文共 1966 字,大约阅读时间需要 6 分钟。

/** * @brief longest common subsequence(LCS)  * @author An * @data  2013.8.26                                                                  **/#include 
#include
using namespace std;enum Direction { Zero, LeftUp, Up, Left };static int m; // length of the first sequencestatic int n; // length of the second sequencestatic int **c; // the length for every subsequencestatic Direction **b; // record the pathvoid LCS_Length( string x, string y );void Print_LCS( string x, int i, int j );void PrintTable();int main(){ string x = "ABCBDAB"; string y = "BDCABA"; LCS_Length( x, y ); Print_LCS( x, m, n ); cout << endl; PrintTable();}void LCS_Length( string x, string y ){ // initialize two tables m = x.length(); n = y.length(); c = new int*[m + 1]; b = new Direction*[m + 1]; for ( int i = 0; i <= m; ++i ) { c[i] = new int[n + 1]; b[i] = new Direction[n + 1]; } // zero row and column for ( int i = 0; i <= m; ++i ) { c[i][0] = 0; b[i][0] = Zero; } for ( int j = 1; j <= n; ++j ) { c[0][j] = 0; b[0][j] = Zero; } // calculate the two tables from bottom to top for ( int i = 1; i <= m; ++i ) { for ( int j = 1; j <= n; ++j ) { if ( x[i - 1] == y[j - 1] ) { c[i][j] = c[i - 1][j - 1] + 1; b[i][j] = LeftUp; } else if ( c[i - 1][j] >= c[i][j - 1] ) { c[i][j] = c[i - 1][j]; b[i][j] = Up; } else { c[i][j] = c[i][j - 1]; b[i][j] = Left; } } // end for } //end for} // end LCS_Length()void Print_LCS( string x, int i, int j ){ if ( i == 0 || j == 0 ) { return; } if ( b[i][j] == LeftUp ) { Print_LCS( x, i - 1, j - 1 ); cout << x[i - 1]; } else if ( b[i][j] == Up ) { Print_LCS( x, i - 1, j ); } else { Print_LCS( x, i, j - 1 ); }}void PrintTable(){ for ( int i = 0; i <= m; ++i ) { for ( int j = 0; j <= n; ++j ) { cout << c[i][j] << " "; } cout << endl; } cout << endl; for ( int i = 0; i <= m; ++i ) { for ( int j = 0; j <= n; ++j ) { cout << b[i][j] << " "; } cout << endl; }}

转载地址:http://vxpra.baihongyu.com/

你可能感兴趣的文章
HttpClient 4.3超时设置
查看>>
PHPCMS2008利用EXP
查看>>
活动的生存期
查看>>
为什么Linux不需要碎片整理?
查看>>
Windows Server 2012 R2 文件服务器安装与配置01 之目录说明
查看>>
最简单的Go环境搭建(Ubuntu)
查看>>
Nginx性能优化
查看>>
Hadoop中的ProxyUser
查看>>
win7实现远程关机-可以批量局域网远程关机
查看>>
Azure 安装.NET3.5机能错误一例
查看>>
Oracle 中ROWNUM用法总结,ROWNUM 与 ROWID 区别
查看>>
ios获取app版本号
查看>>
servlet通过过滤器处理字符集
查看>>
5月28日
查看>>
java策略模式
查看>>
Extjs gridPanl中本地数据分页
查看>>
准备学习手机软件开发
查看>>
C#获取系统时间
查看>>
红黑所-1996-2011年中国***大事记
查看>>
天下会-Google系列之从Google搜获更多
查看>>