您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 数据挖掘中的Apriori算法(C语言版)
/*这个程序是数据挖掘中的Apriori算法*/#includestdio.h#includestring.h#defineD9/*D数事务的个数*/#defineMinSupCount2/*最小事务支持度数*/voidmain(){/*这里的a,b,c,d,e分别代表着书上数据挖掘那章的I1,I2,I3,I4,I5*/chara[10][10]={{'a','b','e'},{'b','d'},{'b','c'},{'a','b','d'},{'a','c'},{'b','c'},{'a','c'},{'a','b','c','e'},{'a','b','c'}};charb[20],d[100],t,b2[100][10],b21[100][10];inti,j,k,x=0,flag=1,c[20]={0},x1=0,i1=0,j1,counter=0,c1[100]={0},flag1=1,j2,u=0,c2[100]={0},n[20],v=1;intcount[100],temp;for(i=0;iD;i++){for(j=0;a[i][j]!='\0';j++){/*这个循环是用来判断之前保存的是否和a[i][j]一样,不一样就保存,一样就不保存*/for(k=0;kx;k++){if(b[k]!=a[i][j]);else{flag=0;break;}}/*这个if是用来判断是否相等*/if(flag==1){b[x]=a[i][j];x++;}elseflag=1;/*这个不保存,那就跳到下一个数*/}}/*计算筛选出的元素的支持度计数*/for(i=0;iD;i++){for(j=0;a[i][j]!='\0';j++){for(k=0;kx;k++)/*这个x是上面b数组中元素个数,用b数组和a[i][j]数组中的每一行和每一列进行比较,用来记录b数组每一个元素的支持度计数*/{if(a[i][j]==b[k]){c[k]++;break;}}}}/*对选出的项集进行筛选,选出支持度计数大于2的,并且保存到d[x1]数组中*/for(k=0;kx;k++){if(c[k]=MinSupCount){d[x1]=b[k];count[x1]=c[k];x1++;}}/*对选出的项集中的元素进行排序*/for(i=0;ix1-1;i++){for(j=0;jx1-i-1;j++){if(d[j]d[j+1]){t=d[j];d[j]=d[j+1];d[j+1]=t;temp=count[j];count[j]=count[j+1];count[j+1]=temp;}}}/*打印出L1*/printf(L1elementsare:\n);for(i=0;ix1;i++){printf({%c}=%d,d[i],count[i]);if(0==(i+1)%3)printf(\n);}printf(\b\n);/*计算每一行的元素个数,并且保存到n[]数组中*/for(i=0;iD;i++){for(j=0;a[i][j]!='\0';j++);n[i]=j;}/*对a[][]数组的每一行进行排序*/for(i=0;iD;i++){for(j=0;jn[i]-1;j++){for(k=0;kn[i]-j-1;k++){if(a[i][k]a[i][k+1]){t=a[i][k];a[i][k]=a[i][k+1];a[i][k+1]=t;}}}}/*把L1中的每一个元素都放在b2[i][0]中*/j1=x1;for(i=0;ij1;i++){b2[i][0]=d[i];}/*把L1中的元素进行组合,K=2开始,表示x1个元素选K个元素的组合*/for(k=2;b2[0][0]!='\0';k++){/*u是用来计数组合总数的*/u=0;v=1;/*v是用来在进行输出各种组合的标识数v=1说明正在进行输出*/for(i=0;i100;i++){c2[i]=0;}for(i=0;ij1;i++){for(i1=i+1;i1j1;i1++){for(j=0;jk-2;j++){if(b2[i][j]!=b2[i1][j]){flag1=0;break;}}/*进行组合的部分*/if(flag1==1&&b2[i][k-2]!=b2[i1][k-2]){for(j2=0;j2k-1;j2++){b21[u][j2]=b2[i][j2];}b21[u][k-1]=b2[i1][k-2];u++;}flag1=1;}}counter=0;for(i=0;iD;i++)/*a数组有5行元素*/{for(i1=0;i1u;i1++)/*U代表x1个元素选K个元素的所有组合总数*/{for(j1=0;j1k;j1++)/*K代表一个组合中的元素个数*/{for(j=0;a[i][j]!='\0';j++)/*逐个比较每一行的元素*/{if(a[i][j]==b21[i1][j1])counter++;}}if(counter==k)c2[i1]++;/*把每种组合数记录在c2数组中*/counter=0;}}j1=0;temp=0;/*这里的temp是用来分行*//*对u种情况进行选择,选出支持度计数大于2的*/for(i=0;iu;i++){if(c2[i]=MinSupCount){if(v==1){printf(L%delementsare:\n,k);v=0;}printf({);for(j=0;jk;j++)/*输出每种组合k个元素*/{b2[j1][j]=b21[i][j];printf(%c,,b2[j1][j]);}j1++;printf(\b});printf(=%d,c2[i]);if(0==(temp+1)%3)printf(\n);temp++;}}b2[j1][0]='\0';if(b2[0][0]!='\0')printf(\b\n);}}
本文标题:数据挖掘中的Apriori算法(C语言版)
链接地址:https://www.777doc.com/doc-5587577 .html