⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcs.m

📁 patten regnization source从1-14章能运行
💻 M
字号:
function [lcscount, lcs_path, lcs_str, lcstable] = lcs(a, b)
%  LCS Longest (maximum) common subsequence
%	侩过:
%	[count, lcs_path, lcs_str, lcstable] = lcsm(a, b)
%	a: 涝仿 巩磊凯 1
%	b: 涝仿 巩磊凯 2
%	count: LCS狼 俺荐
%	lcs_path: lcs 抛捞喉惑俊辑狼 悼利拌裙过狼 烹茄 弥利 菩胶
%	lcs_str: LCS 巩磊凯
%	lcstable: 悼利拌裙过捞 利侩等LCS 抛捞喉

if nargin == 0, return; end

a = a(:).';
b = b(:).';
m = length(a);
n = length(b);
lcstable = zeros(m+1, n+1);
prevx = zeros(m+1, n+1);
prevy = zeros(m+1, n+1);
% 悼利拌裙过阑 荤侩窍咯 LCS 茫扁
for i=1:m,
	for j = 1:n,
		if a(i)==b(j),
			lcstable(i+1,j+1) = lcstable(i,j)+1;
			prevx(i+1,j+1) = i;
			prevy(i+1,j+1) = j;
		elseif lcstable(i,j+1) > lcstable(i+1,j),
			lcstable(i+1,j+1) = lcstable(i,j+1);
			prevx(i+1,j+1) = i;
			prevy(i+1,j+1) = j+1;
		else
			lcstable(i+1,j+1) = lcstable(i+1,j);
			prevx(i+1,j+1) = i+1;
			prevy(i+1,j+1) = j;
		end 
	end
end

% 檬扁 炼扒 力芭
lcstable = lcstable(2:end, 2:end);
prevx = prevx(2:end, 2:end)-1;
prevy = prevy(2:end, 2:end)-1;

% LCS 巩磊凯狼 辨捞 府畔
lcscount = lcstable(m, n);

% 悼利 拌裙过狼 弥利 菩胶 府畔
if nargout > 1,
	now = [m, n];
	prev = [prevx(now(1), now(2)), prevy(now(1), now(2))];
	lcs_path = now;
	while all(prev>0),
		now = prev;
		prev = [prevx(now(1), now(2)), prevy(now(1), now(2))];
		lcs_path = [lcs_path; now];
	end 
	lcs_path = flipud(lcs_path);
end

% LCS 巩磊凯 府畔
if nargout > 2,	
	temp = lcstable((lcs_path(:,2)-1)*m+lcs_path(:,1));  % 菩胶甫 蝶扼 LCS 墨款飘
	temp = [0; temp];
	index = find(diff(temp));
	lcs_str = a(lcs_path(index,1));
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -