📄 算法.txt
字号:
1.输入数据Input( )。
在算法Input( )中,实现从文件中读人数据并转换为字符串,用字符型数组TID[M][N][K]存储交易数据记录。记:TID[0][0][0]表示交易次数;TID[i][0][0]表示第i行数据个数;TID[i][j]表示数据库中第i行第j个交易数据。使用该算法可以从Data_Mining文件中把所有的数据读到数组TID中。
int Input( )
{if stream in(“Data_Mining”);//数据文件Data_Mining
if(! in){cerr<<“Can’t open Input file.\n”;
exit(1);//如文件不存在,则给出提示且退出}
int nomber;
int i=1,j=1;
while(in>>nomber)
{j=1;
TID[i][0][0]=number+48;
while(j< =number)
{in>>TID[i][j];//读取数据字符串
j++;}
i++;}
N =i-1:
TID[0][0][0]=N+48;
in.close( );
return 0;
}
2.发现候选1-项集C1( )。
在算法C1( )中,运用循环结构扫描交易记录数组TID,得到所有的项集以及它的支持频度。其中C[1][1][1]表示C[1]中第一个项集,C[1][1][0][0]表示它的支持频度。
Void C1( )
{int i=1,j=1,k=1;
int tag=1,temp=0;
c[1][1][0][0]=‘0’;
strcpy(C[1][1][1],TID[1][1]);
for(i=1;i< N;i++)
{for(j=1;j<=TID[i][0][0]-48;j++)
{temp=0;
for(k=1;k< tag;k++)
{if(strcomp(C[1][k][1],TID[i][j]))
{c[1][k][0][0]+=1;
temp=1;//如果字符串相等,则temp=1
break;
}
if(temp==0)
{strcpy(C[1][tag+1][1],TID[i][j]);
C[1][tag+1][0][0]=’1’;
Tag+ ;//频繁项集多了一个,tag就加1
}
C[1][0][0][0] tag+48;//表C1中的项集数}
3.发现频繁1-项集Ll( )。
在算法L1( )中在候选1-项集表中进行检验,删除所有支持频度小于最小支持频度min_sup的项集,得到频繁1-项集L1。
void L1( )
{int i=1;
C1( );
text(i);
}
4.发现候选k-项集Cn( )。
在算法Cn( )中,以频繁1-项集Ll为基础通过连接得到候选2-项集,通过检验后得到频繁2-项集L2,再以L2为基础求候选3-项集,如此循环直到频繁k-项集为空。
void Cn(int &n)
{int i,j,k,p,q,s,t;
int tag=0,true=1,temp=0;
C[n][0][0][0]=‘0’,
for(i=1,i<=C[n-1][0][0][0]-48;i++)
for(j=i+1;j<=C[n-1][0][0][0]-48;j++)
{temp=0;
if(n>2){for(k=1;k<n-1;k++)
{if(!strcomp(C[n-1][i][k],C[n-1][j][k]))
{temp=1;break;}
}}
if(temp==0)//项集满足“连接”的条件
{true=1;
tag++ ;
for(p=1;p<=n-1;p++)
strcpy(C[n][tag][p],C[n-1][j][p]);
strcpy(C[n][tag][p],C[n-1][j][p-1]);
C[n][tag][0][0]=‘0’;
for(q=1;q<=N;q++)
{for(s=1;C[n][tag][s][0]!=‘\O’;S++)
{for(t=1;y<=TID[q][0][0]-48;t++)
{if(!strcomp(C[n][tag][s],TID[q][t]))
true=0;
else{true=1;break;}
}
if(true==0)break;
}
if(true==1)C[n][tag][0][0]+=1;
}
C[n][0][0][0]+=1;
}
}
5.数据输出output_Ln( )。
在算法output_Ln( )中,输出逐层产生的所有频繁k-项集。
void output_Ln(int &n)
{inti,j,k;
cout<<”* The table L”<<n<<”is:”<<endl;
if(C[n][0][0][0]-48!=0)
for(i=1:i<=C[n][0][0][0]-48;i++)
{if(C[n][i][0][0]-48>=min)
{cout<<“{”;
for(j=1;j<=n;j++)
cout<<””<<c[n][i][j]<<””;
cout<<”}---------“<<C[n][i][0][0]<<endl;
else i++;
}
else cout<<”None!” <<endl;//项集为空就输出None
本系统采用Microsoft Visual C++ 6.0作为开发语言,数据库选用accesss数据库,在Microsoft Windows XP 环境下
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -