期末论文选的是最长公共子序列的其他解法,偶然发现Nakatsu算法对于最长公共子序列求解速度很快。呕心沥血写的代码=。=| 希望可以给以后想学习用Nakatsu算法的朋友们一个参考。 注:Nakatsu求的是最佳匹配度,子序列可能所含字符不正确,但却是基于Nakatsu算法的最佳匹配,求得的最长公共子序列的长度是一定对的。(没用使用STL容器,不是很熟练)
/******************************************
代码说明:
本程序定义了二维动态数组L[][]用来存储Nakatsu算法中计算相同字符对应位置的矩阵
最大值即不存在相等的字符
若L[][]对角线上任意一个位置为最大值,对角线上其余位置也是最大值,即本条对角线上不存在最大公共子序列
*******************************************/
//Nakatsu求解的是基于自身算法的最长公共子序列的最佳匹配度,在某些情况可能与最长公共子序列有所偏差,即长度一致,字符可能会偏差少许
#include <iostream>
#include <string>
#include <iomanip>
using namespace std;
void LCS_N(const string& a, const string& b)
{
unsigned int i = 0;//循环控制变量也当做L[][i]数组列下标
unsigned int j = 0;//循环控制变量
unsigned int m = a.length();//短字符串长度
unsigned int n = b.length();//长字符串长度
unsigned p = m-1;//记录最长子序列长度
unsigned int k=1;//L[k][]数组行下标