文档介绍:Data Ming Project Report
Name:鸭哥私房
Class: xx软件工程一班
Student Number: xxxxxx
Proj ect Name:关联规则 Apriori 算法
Experiment r(j=l;j<=nl;j++) //for2
printf C请输入交易[%d]中记录项,直接输入数 字:〃,i);
scanf ("%d”, &D[i]. item[j]);
}//for2
} //fori
}//end of InPut
void Cl ()
{
〃功能:扫描数据集D生成1项候选集C1
〃输入:数据集D
〃输出1项候选集C1
〃初始条件数据集D非空
int i, j, k;
int no=l, temp=0;
C[l][0].item[0]=0; //I项集的个数,在本算法中,用
C[n] [k]. item[0]来保存候选集Cn的第k项的支持度
if(D[0]. item[0] !=0)
C[l] [1]. item[l]=D[l]. ;
}
for(i=l;i<=D[0]. item[0];i++) //fori
{
for(j=l;j<=D[i]. item[0];j++) //for2
{
temp=l;
for (k=1;k<=no;k++) //for3
{
if (C[l] [k]. item[l]==D[i]. item[j])
{
C[l] [k]. item[0]++; //支持度加 1
temp=0; //
} //if
}//end for3
if (temp) //生成新的项集
C[l] [++no]. item[l]=D[i]. item[j];
C[l] [no]. item[0]=l;
}
}//end for2
} // end fori
C[l] [0]. item[0]=no;〃数据项的个数
} //end of Cl ()
void Cn( int n)
{
〃用频繁集Ln-1为基础,通过连接得到n项候选集Cn
int i, j, k, p, q, s, t, num;
int no=0, temp=0, count;
C[n] [0]. item[0]=0; //初始化
〃printf("in Cn (%d) n=%d\n”, n, n);
Cn(%d)
//printf("in
C[%d] [0]. item[0]=%d\n”, n, n, C[n] [0]. item[0]);
num=L[n-l] [0]. item[0]; //num 是 Ln-1 项集的数据个数
for(i=l;i<=num;i++)
for(j=i+l:j<=num;j++) //for2
(
temp=l; 〃测试是否满足联结条件
if(n>2)//if 1
{
for (k=l ;k〈nT ;k++) //for3
{
if (L[n-1] [i]. item[k] !=L[nT] [j]. item[k])
{ temp=0;
break: }//if 1
}//end for3
}//end ifl
if (temp==l) 〃满足联结条件
{
// printf("in if 2 no=%d\n”,no);
no++;
for (p=l;p<=n-l;p++)
C[n] [no]. item[p]=L[n-l] [i]. item[p]:
C[n] [no]. item[p]=L [n-1] [j]. item [p-1];
C[n] [no]. item[0]=0;
for(q=l;q〈=D[0]. item[0];q++)
//for5测试其支持度
{
count=0; //count用来记数,当所测试的项存在时,count 加1,当count=n时,则子集存在
for(s=l;C[n][no]. item[s]!=0;s++) //for6
(
for(t=l;t〈=D[q]. item[0];t++) //for7
{
if (C[n] [no]. item[s]==D[q]. item[t])
{ count+=l;
break;
}
}//end for7
}//end for 6
if(count==n)
C[n] [no]. item[O]+=l;〃子集存在,第no项的支持度加1
}//end for5
C[n] [0]. item[0]+=l;
}//end if2
}//end for2
/* num=C[n][0]. item[0];