📄 说明.txt
字号:
Appriori算法实现(C版)
开学在即,闲来无事就将以前没有完成的Apriori算法用C写出来了,拿出来共享.
文件列表:
input.txt 保存minsupport,minconfidence作为算法输入;
source.txt 保存字符串形式的事务作为算法输入;
result.txt 保存X->Y形式的规则作为算法输出;
appriori.c C语言编写的算法代码;
实验环境:
Win-TC 1.9.1
基本数据结构:
以字典顺序的字符串表示事务,如abc;
以链表结构表示项目集,包括字符串,支持度,next指针;
以链表指针h[]来表示不同项目集头指针,其中h[0]为事务链表头指针,h[1]为1元项目集链表头指针....;
部分算法思想(其它函数均有注释):
规则的生成:对于k-频繁项集,设置一k元数组(其元素只能取0-1),在该数组由全1依次变成全0过程中,按数组中的0-1 对应分配给规则的左右边,即所有0对应的项组成前提,1对应的项组成结果
以abcd为例:i=4;j=pow(2,i)-2=14;其二进制保存为str[]={'1','1','1','0'},则adhead[]={"abc"},sequent[]={"d"};
j=13, str[]={'1','1','0','1'},则adhead[]={"abd"},sequent[]={"d"}; ......
未完成部分:
从频繁项集中得到最大频繁项集;
计算规则的置信度,并输出真正的关联规则:X->Y|conf;
算法输出结果:
ce 4
de 5
abc 2
abe 2
acd 2
ace 2
ade 3
bcd 3
bce 3
bde 2
cde 3
acde 2
bcde 2
(以上为在屏幕中输出的算法过程中产生出的部分频繁项信息)
Rules from frequent itemset[bce|3] are:
e->bc c->be ce->b b->ce be->c bc->e
Rules from frequent itemset[bde|2] are:
e->bd d->be de->b b->de be->d bd->e
Rules from frequent itemset[cde|3] are:
e->cd d->ce de->c c->de ce->d cd->e
******end of 3_frequent itemset list******
Rules from frequent itemset[acde|2] are:
e->acd d->ace de->ac c->ade ce->ad cd->ae cde->a a->cde ae->cd ad->ce ade->c ac->de ace->d acd->e
Rules from frequent itemset[bcde|2] are:
e->bcd d->bce de->bc c->bde ce->bd cd->be cde->b b->cde be->cd bd->ce bde->c bc->de bce->d bcd->e
* *****end of 4_frequent itemset list******
(以上为在result.txt文件中输出的算法结果的部分规则信息)
注意:当需要加大算法输入时(主要是事务数据源),请相应改动算法中的
#define Maxnum 20
#define item_num 10(以字符表示单个事务项,该变量定义为一条事务数据中最大的项数)
counter[item_num]={0,0,0,0,0,0,0,0,0,0};(用来记录字典顺序下对应单个事务项的个数)
charset[item_num]={"abcdefghij"};(用字典顺序下的字符表示对应单个事务项)
[ 本帖最后由 fangzm 于 2007-8-28 01:12 PM 编辑 ]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -