Nakatsu算法--C++实现

    期末论文选的是最长公共子序列的其他解法,偶然发现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][]数组行下标

	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值