📄 test40-071013.m
字号:
%2007年4月14日 第四篇文章 最大命中子模式树算法 test100
clear
p=4;
q=6;
minconf=0.25;
%产生人工仿真数据,a**d,重复2500次
ds=2500;
for i=1:ds
s((i-1)*p+1)='a';
s((i-1)*p+4)='d';
M=1;
%randn('state',0);
while M==1
%v=normrnd(0,0.1);
v=randn;
if (v>=-3)&(v<=3)
s((i-1)*p+2)=char(97+floor((v+3)*q/6));
M=0;
end
end
%randn('state',1);
while M==0
%v1=normrnd(-3,3);
v1=randn;
if (v1>=-3)&(v1<=3)
s((i-1)*p+3)=char(97+floor((v1+3)*q/6));
M=1;
end
end
end
%计算每个1-模式的计数
n=length(s)/p;
count(1:14)=0;
for i=1:n
for j=1:p
d(i,j)=s((i-1)*p+j);
end
if d(i,1)=='a'
count(1)=count(1)+1;
end
if d(i,2)=='a'
count(2)=count(2)+1;
elseif d(i,2)=='b'
count(3)=count(3)+1;
elseif d(i,2)=='c'
count(4)=count(4)+1;
elseif d(i,2)=='d'
count(5)=count(5)+1;
elseif d(i,2)=='e'
count(6)=count(6)+1;
elseif d(i,2)=='f'
count(7)=count(7)+1;
end
if d(i,3)=='a'
count(8)=count(8)+1;
elseif d(i,3)=='b'
count(9)=count(9)+1;
elseif d(i,3)=='c'
count(10)=count(10)+1;
elseif d(i,3)=='d'
count(11)=count(11)+1;
elseif d(i,3)=='e'
count(12)=count(12)+1;
elseif d(i,3)=='f'
count(13)=count(13)+1;
end
if d(i,4)=='d'
count(14)=count(14)+1;
end
end
%选出频繁1-模式,构成F11
L1=0;
for i=1:14
if count(i)>=minconf*n
L1=L1+1;
F1(L1)=i;
end
end
F1
for i=1:L1
if F1(i)==1
F11(i,:)='a***';
elseif F1(i)==2
F11(i,:)='*a**';
elseif F1(i)==3
F11(i,:)='*b**';
elseif F1(i)==4
F11(i,:)='*c**';
elseif F1(i)==5
F11(i,:)='*d**';
elseif F1(i)==6
F11(i,:)='*e**';
elseif F1(i)==7
F11(i,:)='*f**';
elseif F1(i)==8
F11(i,:)='**a*';
elseif F1(i)==9
F11(i,:)='**b*';
elseif F1(i)==10
F11(i,:)='**c*';
elseif F1(i)==11
F11(i,:)='**d*';
elseif F1(i)==12
F11(i,:)='**e*';
elseif F1(i)==13
F11(i,:)='**f*';
elseif F1(i)==14
F11(i,:)='***d';
end
end
F11=F11
%由频繁1-模式形成候选最大模式Cmax
k1=0;
for i=1:p
D=F11(:,i);
k=0;
for j=1:L1
if D(j)~='*'
k1=k1+1;
Cmax(k1)=D(j);
k=1;
end
if (j==L1)&(k==0)
k1=k1+1;
Cmax(k1)='*';
end
end
k1=k1+1;
Cmax(k1)='0';
end
Cmax=Cmax
%判断Cmax的L-长度
len=0;
len1=0;
for i=1:length(Cmax)
if (isletter(Cmax(i))==1)&(len==0)
len=len+1;
Lth(len)=Cmax(i);
len1=len1+1;
elseif (isletter(Cmax(i))==1)&(len~=0)
M1=0;
for j=1:len1
if Cmax(i)~=Lth(j)
M1=M1+1;
end
end
if M1==len1
len=len+1;
Lth(len)=Cmax(i);
len1=len;
end
end
end
Lth=Lth
Lth_length=length(Lth)
%构造最大子模式图
Lnode=struct('x',0,'y',0);
for i=1:(len-1)
Lnode(i).x=len+1-i;
Lnode(i).y=1;
%Lnode1(i,2)=Snode(1).cx(len+1-i);
end
D1=findstr(Cmax,'0');
H1=struct('x1',{},'x2',{},'x3',{},'x4',{},'x5',{},'x6',{},'x7',{});
H2=struct('x1',{},'x2',{},'x3',{},'x4',{});
H3=struct('x1',{},'x2',{},'x3',{},'x4',{});
for i=1:2500
% Cmax与每个周期段作交运算,得到命中的最大子模式
%判断命中的最大子模式是否为空
for j=1:4
D2(j)=s((i-1)*4+j);
if j==1
d3=findstr(Cmax(1:(D1(j)-1)),D2(j));
if isempty(d3)==1
H(j)='*';
else
H(j)=D2(j);
end
else
d3=findstr(Cmax((D1(j-1)+1):(D1(j)-1)),D2(j));
if isempty(d3)==1
H(j)='*';
else
H(j)=D2(j);
end
end
end
if strcmp(H,'****')==0
if isempty(H1)==1
H1(1).x1=H(1);
H1(1).x2=H(2);
H1(1).x3=H(3);
H1(1).x4=H(4);
H1(1).x5=1;
H1(1).x6=p-length(findstr(H,'*'));
else
k=0;
for j1=1:length(H1)
H2(1).x1=H1(j1).x1;
H2(1).x2=H1(j1).x2;
H2(1).x3=H1(j1).x3;
H2(1).x4=H1(j1).x4;
H3(1).x1=H(1);
H3(1).x2=H(2);
H3(1).x3=H(3);
H3(1).x4=H(4);
c1=struct2cell(H2);
c2=struct2cell(H3);
if strcmp(c1,c2)==1
H1(j1).x5=H1(j1).x5+1;
else
k=k+1;
end
end
if k==length(H1)
H1(k+1).x1=H(1);
H1(k+1).x2=H(2);
H1(k+1).x3=H(3);
H1(k+1).x4=H(4);
H1(k+1).x5=1;
H1(k+1).x6=p-length(findstr(H,'*'));
end
end
end
end
k2=0;
for j=1:length(H1)
k2=k2+H1(j).x5;
end
k2=k2
%在命中模式集H1中,求每一个最大命中子模式的超模式;
for j=1:length(H1)
k=0;
for i=1:length(H1)
if H1(j).x6<H1(i).x6
H2(1).x1=H1(j).x1;
H2(1).x2=H1(j).x2;
H2(1).x3=H1(j).x3;
H2(1).x4=H1(j).x4;
%H1(j)与H1(i)作交运算
if isempty(findstr(H1(j).x1,H1(i).x1))==1
H3(1).x1='*';
else
H3(1).x1=H1(j).x1;
end
if isempty(findstr(H1(j).x2,H1(i).x2))==1
H3(1).x2='*';
else
H3(1).x2=H1(j).x2;
end
if isempty(findstr(H1(j).x3,H1(i).x3))==1
H3(1).x3='*';
else
H3(1).x3=H1(j).x3;
end
if isempty(findstr(H1(j).x4,H1(i).x4))==1
H3(1).x4='*';
else
H3(1).x4=H1(j).x4;
end
%H1(j)与H1(i)作交运算的结果H3与H1(j)--H2比较,如果H3==H2,则H1(i)是H1(j)的超模式
c1=struct2cell(H2);
c2=struct2cell(H3);
if strcmp(c1,c2)==1
k=k+H1(i).x5;
end
end
end
H1(j).x7=k+H1(j).x5;
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -