资源描述
Apriori算法实验报告
学 号:
姓 名:
专 业: 计算机应用技术
教 师:
计算机学院
目 录
1 APRIORI实验 1
1、1 实验背景ﻩ1
1、1、1 国内外研究概况ﻩ1
1、1、2 发展趋势 1
1、2 实验内容与要求ﻩ1
1、2、1 实验内容 1
1、2、2 实验要求ﻩ1
1、2、3 实验目得ﻩ2
2 APRIORI算法分析与实验环境 3
2、1 Apriori算法得描述ﻩ3
2、2 Apriori算法得步骤ﻩ3
2、3 开发环境ﻩ3
2、3、1 软件环境 3
2、3、2 硬件环境 4
2、4 本章小结ﻩ4
3 算法得设计ﻩ5
3、1 Apriori算法整体框架 5
3、2 主要得数据结构与函数ﻩ5
3、2、1 数据结构ﻩ5
3、2、2 主要得程序 6
3、2、3 连接与剪枝操作ﻩ6
3、3 本章小结ﻩ6
4 数据库得设计与数据得来源ﻩ7
4、1正确性验证数据ﻩ7
4、2 实验数据ﻩ7
4、3 本章小结 8
5 实验结果与性能分析 9
5、1 Apriori实验界面ﻩ9
5、2 实验得正确性验证 9
5、3 实验性能分析ﻩ10
5、3、1固定最小支持度改变数据量ﻩ10
5、3、2固定数据量改变最小支持度ﻩ11
5、3、3实验结果分析ﻩ11
5、4 本章小结ﻩ12
6 总结与体会ﻩ13
1 Apriori实验
1、1 实验背景
现在, 数据挖掘作为从数据中获取信息得有效方法, 越来越受到人们得重视。关联规则挖掘首先就是用来发现购物篮数据事务中各项之间得有趣联系。从那以后, 关联规则就成为数据挖掘得重要研究方向,它就是要找出隐藏在数据间得相互关系。目前关联规则挖掘得研究工作主要包括:Apriori算法得扩展、数量关联规则挖掘、关联规则增量式更新、无须生成候选项目集得关联规则挖掘、最大频繁项目集挖掘、约束性关联规则挖掘以及并行及分布关联规则挖掘算法等。关联规则得挖掘问题就就是在事务数据库D中找出具有用户给定得满足一定条件得最小支持度Minsup与最小置信度Minconf得关联规则。
1.1.1 国内外研究概况
1993年,Agrawal等人首先提出关联规则概念,关联规则挖掘便迅速受到数据挖掘领域专家得广泛关注、迄今关联规则挖掘技术得到了较为深入得发展。Apriori算法就是关联规则挖掘经典算法。针对该算法得缺点,许多学者提出了改进算法,主要有基于哈希优化与基于事务压缩等。
1.1.2 发展趋势
关联规则挖掘作为数据挖掘得重要研究内容之一, 主要研究事务数据库、关系数据库与其她信息存储中得大量数据项之间隐藏得、有趣得规律。关联规则挖掘最初仅限于事务数据库得布尔型关联规则, 近年来广泛应用于关系数据库, 因此, 积极开展在关系数据库中挖掘关联规则得相关研究具有重要得意义。近年来,已经有很多基于Apriori算法得改进与优化。研究者还对数据挖掘得理论进行了有益得探索,将概念格与粗糙集应用于关联规则挖掘中,获得了显著得效果。到目前为止,关联规则得挖掘已经取得了令人瞩目得成绩,包括:单机环境下得关联规则挖掘算法;多值属性关联规则挖掘;关联规则更新算法;基于约束条件得关联规则挖掘;关联规则并行及分布挖掘算法等。
1、2 实验内容与要求
1、2、1 实验内容
编程实现Apriori算法:要求使用‘a’,‘b’,‘c’,‘d’,‘e’,‘f’,‘g’,‘h’,‘i’,‘j’10个项目随机产生数据记录并存入数据库。从数据库读取记录进行Apriori实验,获得频繁集以及关联规则,实现可视化。并用课堂上得实例测试其正确性。
1、2、2 实验要求
1、程序结构:包括前台工具与数据库;
2、设定项目种类为10个,随机产生事务,生成数据库;
3、正确性验证(可用课堂上得例子);
4、算法效率得研究:在支持度固定数据量不同得时候测量运行时间;在数据量固定,支持度不同得时候测量运行时间;
5、注意界面得设计,输入最小支持度与最小可信度,能够输出并显示频繁项目集以及关联规则。
1、2、3 实验目得
1、加强对Apriori算法得理解;
2、锻炼分析问题、解决问题并动手实践得能力。
2 Apriori算法分析与实验环境
2、1 Apriori算法得描述
Apriori算法就是一种找频繁项目集得基本算法。其基本原理就是逐层搜索得迭代:频繁K项Lk 集用于搜索频繁(K+1)项集Lk+1,如此下去,直到不能找到维度更高得频繁项集为止。这种方法依赖连接与剪枝这两步来实现。算法得第一次遍历仅仅计算每个项目得具体值得数量,以确定大型l项集。随后得遍历,第k次遍历,包括两个阶段。首先,使用在第(k-1)次遍历中找到得大项集Lk-1与产生候选项集Ck。接着扫描数据库,计算Ck中候选得支持度。用Hash树可以有效地确定Ck中包含在一个给定得事务t中得候选。如果某项集满足最小支持度, 则称它为频繁项集。
2、2 Apriori算法得步骤
步骤如下:
1、设定最小支持度s与最小置信度c;
2、Apriori算法使用候选项集。首先产生出候选得项得集合,即候选项集,若候选项集得支持度大于或等于最小支持度,则该候选项集为频繁项集;
3、在Apriori算法得过程中,首先从数据库读入所有得事务,每个项都被瞧作候选1-项集,得出各项得支持度,再使用频繁1-项集集合来产生候选2-项集集合,因为先验原理保证所有非频繁得1-项集得超集都就是非频繁得;
4、再扫描数据库,得出候选2-项集集合,再找出频繁2-项集,并利用这些频繁2-项集集合来产生候选3-项集;
5、重复扫描数据库,与最小支持度比较,产生更高层次得频繁项集,再从该集合里产生下一级候选项集,直到不再产生新得候选项集为止。
2、3 开发环境
2.3.1 软件环境
(1)编程软件:Jdk开发包+eclipse集成开发环境
Eclipse 就是一个开放源代码得、基于Java得可扩展开发平台。就其本身而言,它只就是一个框架与一组服务,用于通过插件组件构建开发环境。幸运得就是,Eclipse 附带了一个标准得插件集,包括Java开发工具(Java Development Kit,JDK)。
(2)数据库软件:SQL Server 2008
SQL Server 2008 在Microsoft得数据平台上发布,可以组织管理任何数据。可以将结构化、半结构化与非结构化文档得数据直接存储到数据库中。可以对数据进行查询、搜索、同步、报告与分析之类得操作。数据可以存储在各种设备上,从数据中心最大得服务器一直到桌面计算机与移动设备,它都可以控制数据而不用管数据存储在哪里。
(3)办公软件:Excel 2010
Excel就是一款试算表办公软件。它就是微软办公套装软件office得重要得组成部分,它就是集统计分析、数据处理与辅助决策等功能于一身,现在金融、统计财经、管理等众多领域广泛应用。本实验主要用来为固定数据量改变最小支持数以及固定最小支持数改变数据量两种情况进行时间分析提供可视化图表。
2.3.2 硬件环境
装有Windows 7 旗舰版电脑。
2、4 本章小结
本章得内容主要就是为了引出本实验得主要算法以及对算法得实现环境做了介绍。
ﻬ3 算法得设计
3、1 Apriori算法整体框架
图3、1 Apriori实验流程图
3、2 主要得数据结构与函数
3、2、1 数据结构
class Transaction
{
ﻩpublic int pid;
public String itemset;
}
该类表示表中得一条记录。
class Dao
{
public ArrayList<Transaction> Query(String sql)
}
该类用于访问数据库操作。
class Kfp
{
ﻩpublic char kfpstr[]=new char[Apriori、ITEMSIZE];
public int index=-1;
public int support=0;
public boolean isfp=true;
}
该类代表一个频繁项目。
3、2、2 主要得程序
Java 中最常用得集合类就是 List 与 Map。 List 得具体实现包括 ArrayList 与 Vector,它们就是可变大小得列表,比较适合构建、存储与操作任何类型对象得元素列表。 List 适用于按数值索引访问元素得情形。HashMap:Map接口得常用实现类,系统<key,value>当成一个整体进行处理,系统总就是根据Hash算法来计算<key,value>得存储位置,这样可以保证能快速存、取 Map得<key,value>对。
ArrayList<Transaction> alTransactions:保存表中得所有记录
ArrayList<Kfp> alKfpsl:临时存储频繁项目得集合,存储连接后得结果
ArrayList<Kfp> SureFpset:保存频繁k项集
ArrayList<Kfp> SureFpsetPrio:保存频繁k-1项集
ArrayList<String> notFpList:保存一定不就是频繁项目得集合,用于剪枝
HashMap<String, Integer> KfpSuppor:频繁项目集及其对应得支持数
HashMap<String,Double> guanlianguize:关联规则及其置信度
3、2、3 连接与剪枝操作
对于连接操作得两个字符串(长度为k),它们必须有k-1个相同得字符才能做连接操作。
例如:abc与abd可以连接成abcd,abd与bcd可以连接成abcd,而abc与ade就不可以做连接操作。整个连接过程类似归并排序中得归并操作
对于任一频繁项目集得所有非空子集也必须就是频繁得,反之,如果某个候选得非空子集不就是频繁得,那么该候选集肯定不就是频繁得,将其剪枝。
3、3 本章小结
本章主要介绍了算法设计得整体流程并且也对主要程序与操作作了简要得说明。
4 数据库得设计与数据得来源
本实验得数据均存储于数据库中。数据库yuzm中共产生6张表。表test为测试用表,用于程序得正确性验证。还有5张表存储随机产生得实验数据。其中数据库得结构如下图所示。
图4、1 数据库结构
4、1正确性验证数据
表test为上得实例,用于正确性验证。数据得item个数为5,其中得九行数据均由SQL语句产生,表得每一行都就是一个“0”“1”得字符串,字符串长度等于商品种类,其中“0”表示该商品不存在,“1”表示该商品存在。表得全部数据如图4、2。
图4、2 表test
4、2 实验数据
5张表就是通过算法随机产生得具有不同数据量得数据集,假设商品种类为10种,表得每一行都就是一个“0”“1”得字符串,字符串长度等于商品种类,其中“0”表示该商品不存在,“1”表示该商品存在。其中表data1共随机产生1万行数据,表data2产生5万行数据,表data3产生25万行数据,表data4产生50万行数据,表data5产生75万行数据。部分数据如图4、3。
图4、3 实验用表(部分)
4、3 本章小结
本章主要对数据库得设计与数据来源做出了说明。
5 实验结果与性能分析
5、1 Apriori实验界面
其中可信度可自由设置,默认为0、7。而支持度记为最小支持度与数据量得比例。实验数据可以下拉选择6张表中得任意一张。如下图所示:
图5、1 实验界面
5、2 实验得正确性验证
运行程序,我们选择表test,即可进行正确性验证,实验结果如下图:
图5、2 正确性验证
最终实验结果与得结果相吻合,表明程序编写正确。
5、3 实验性能分析
为了对本程序得实验进行性能分析,我们分别采用固定数据量改变最小支持数以及固定最小支持数改变数据量两种情况进行时间分析,其中最小置信度设为0、7不变。
5、3、1固定最小支持度改变数据量
设支持度为0、2,最小可信度为0、7。具体实验数据量与执行时间如下:
表5、1 数据量对性能得影响
数据量(万行)
1
5
25
50
75
时间(秒)
48、2
128、2
366、9
623、4
1032、3
图5、3 数据量对性能得影响
5、3、2固定数据量改变最小支持度
设实验数据量固定改变最小支持度,具体如下所示:
表5、2 最小支持度对性能得影响
最小支持度
0、15
0、20
0、25
0、30
0、35
时间(秒/ 1万)
175、6
49
14、2
8、5
5、2
时间(秒/ 5万)
294、1
128、2
58、8
41、5
25、7
时间(秒/ 25万)
531、3
366、9
246、5
185、6
154、0
图5、4 最小支持度对性能得影响
5、3、3实验结果分析
由以上实验我们可以瞧出,实验时间会随着数据量得增大而增大,并且随着最小支持度得增大而减小。并且她们之间得变化类似于某种指数函数得变化趋势。Apriori得时间主要消耗在4个方面:
1、利用K频繁集连接产生K+1候选集时,判断连接得条件时比较得次数太多。假设项集个数为m得频繁集合Lk,判断连接条件时比较得时间复杂度为O(K*m2)。而且本实验得m都很大;
2、对Ck中任意得一个c得k个(k-1)子集就是否都在Lk-1中。在平均情况下,对所有候选k项集需要扫描次数为|Ck|*|Lk-1|*k/2;
3、为了得到所有得候选频集得支持度,需要扫描N次;
4、扫描一次数据库需时间O(k|T|)。|T|为交易数量,k交易长度
5、4 本章小结
Apriori算法因自身需要多次扫描数据库,并且经过复杂得连接剪枝操作而产生大量候选集以及进行大量得模式匹配计算得缺陷,使得其在I/O上得花费时间很多,从而导致算法得效率不就是太高。6 总结与体会
通过本次实验,让我明白了什么就是Apriori算法与数据之间得关联性,Apriori算法就是一种最有影响得挖掘布尔关联规则频繁项集得算法,为以后进步学习数据挖掘知识打下了良好得基础。同时我也更加深刻理解了Apriori算法得原理及其实现得内部细节,同时通过实现这一经典得数据挖掘算法,也让我更深刻得体会到数据挖掘对于知识发现得重要性,尽管实现了算法,但其中可能还有可以改进得地方,尤其就是程序得运行效率方面。Apriori算法实验不仅使得我对该算法得理解更加上升了一个层次,同时也使得我更加了解了java编程语言,使用更加得心应手。
import java、awt、BorderLayout;
import java、awt、Font;
import java、awt、GridLayout;
import java、awt、Panel;
import java、awt、TextArea;
import java、awt、TextField;
import java、awt、event、ActionEvent;
import java、awt、event、ActionListener;
import java、util、ArrayList;
import java、util、HashMap;
import java、util、Iterator;
import java、util、Set;
import javax、swing、JButton;
import javax、swing、JboBox;
import javax、swing、JFrame;
import javax、swing、JLabel;
import javax、swing、JPanel;
import javax、swing、JTextField;
import org、omg、CORBA、PUBLIC_MEMBER;
public class Apriori extends JFrame implements ActionListener
{
//////////////////////////////////////////////////////
ﻩpublic static int ITEMSIZE=10;
ﻩpublic final int FRAMEWIDTH=800;
public final int FRAMEHEIGHT=600;
ﻩ///////////////////////////////////////////////////////
ﻩJPanel up=null;
JPanel up_up=null;
ﻩTextField textFieldName[]=null;
ﻩJPanel up_down=null;
JPanel up_down_left=null;
JLabel conflabel=null;
JLabel c1=null;
JLabel c2=null;
ﻩJLabel c3=null;
ﻩJLabel c4=null;
JLabel c5=null;
ﻩJLabel c6=null;
JLabel c7=null;
JLabel c8=null;
ﻩJTextField conf=null;
JLabel supportlabel=null;
ﻩJTextField support=null;
JPanel up_down_right=null;
JboBox jboBoxDateSize=null;//下拉框
JButton jButtonMine=null;
ﻩJPanel down=null;
ﻩTextArea textArea=null;
int fpstep=1;
ﻩint fpindex=0;
Dao dao=null;
double MinSupport=0、20;
double MinConfi=0、70;
double DateSize=9、0;
ArrayList<Transaction> alTransactions=null;
ﻩArrayList<Kfp> alKfps=null;
ArrayList<String> notFpList=null;
ArrayList<Kfp> SureFpset=null;
ﻩArrayList<Kfp> SureFpsetPrio=null;
ﻩHashMap<String, Integer> KfpSupport=null;
ArrayList<String> alsurekfpstr=null;
HashMap<String,Double> guanlianguize=null;
ﻩArrayList<String> isaddarrStrings=null;
ﻩint [][]AuxArr=null;
public static void main(String[] args)
ﻩ{
Apriori A=new Apriori();
ﻩ}
public Apriori()
{
JPanel up=new JPanel(new GridLayout(2, 1));
ﻩJPanel up_up=new JPanel(new GridLayout(1, ITEMSIZE));
ﻩ//TextField textFieldName[]=new TextField[ITEMSIZE];
ﻩ //for(int i=0;i<ITEMSIZE;i++)
//{
// textFieldName[i]=new TextField();
ﻩﻩ//ﻩup_up、add(textFieldName[i]);
ﻩﻩ//}
ﻩ c1=new JLabel(" 数");
ﻩ up_up、add(c1);
c2=new JLabel(" 据");
ﻩ up_up、add(c2);
c3=new JLabel(" 挖");
up_up、add(c3);
c4=new JLabel(" 掘");
ﻩﻩup_up、add(c4);
ﻩﻩc5=new JLabel(" 实");
ﻩup_up、add(c5);
c6=new JLabel(" 验");
up_up、add(c6);
c7=new JLabel(" --------");
ﻩ up_up、add(c7);
ﻩc8=new JLabel(" Apriori");
ﻩﻩup_up、add(c8);
ﻩ up_down=new JPanel(new GridLayout(1, 2));
ﻩ up_down_left=new JPanel(new GridLayout(1, 4));
ﻩconflabel=new JLabel("可信度:");
ﻩconf=new JTextField();
ﻩconf、setText("0、7");
ﻩsupportlabel=new JLabel("支持度:");
ﻩﻩsupport=new JTextField();
ﻩsupport、setText("0、2");
ﻩ up_down_left、add(conflabel);
ﻩup_down_left、add(conf);
ﻩup_down_left、add(supportlabel);
ﻩup_down_left、add(support);
up_down_right=new JPanel(new GridLayout(1, 2));
ﻩ jboBoxDateSize=new JboBox();//下拉框
jboBoxDateSize、addItem("test");
jboBoxDateSize、addItem("data1");
ﻩ jboBoxDateSize、addItem("data2");
jboBoxDateSize、addItem("data3");
ﻩ jboBoxDateSize、addItem("data4");
ﻩﻩjboBoxDateSize、addItem("data5");
ﻩ jboBoxDateSize、addActionListener(this);
ﻩjButtonMine=new JButton("开始挖掘");
ﻩﻩjButtonMine、addActionListener(this);
ﻩ up_down_right、add(jboBoxDateSize);
ﻩﻩup_down_right、add(jButtonMine);
ﻩﻩup_down、add(up_down_left);
up_down、add(up_down_right);
ﻩﻩup、add(up_up);
ﻩﻩup、add(up_down);
down=new JPanel(new BorderLayout()) ;
ﻩ textArea=new TextArea();
ﻩ //textArea、setFont(new Font(Font、DIALOG,Font、ITALIC , 20));
ﻩﻩtextArea、setFont(new Font(Font、DIALOG,Font、PLAIN , 20));
ﻩ down、add(textArea);
ﻩthis、setLayout(new BorderLayout());
ﻩﻩthis、setSize(FRAMEWIDTH, FRAMEHEIGHT);
ﻩﻩthis、setLocation(100, 100);
ﻩ this、setSize(this、FRAMEWIDTH, this、FRAMEHEIGHT);
ﻩﻩthis、setDefaultCloseOperation(JFrame、EXIT_ON_CLOSE);
this、setTitle("Apriori");
ﻩ //up、setSize(this、FRAMEWIDTH, 100);
ﻩ this、add(up,BorderLayout、NORTH);
//down、setLocation(0, 100);
ﻩ//down、setSize(this、FRAMEWIDTH, this、FRAMEHEIGHT-100);
ﻩﻩthis、add(down);
ﻩﻩthis、setVisible(true);
}
ﻩpublic void InitDate(String table)
ﻩ{
fpstep=1;
ﻩ AuxArr=new int[ITEMSIZE+1][ITEMSIZE+1];
ﻩ alKfps=new ArrayList<Kfp>();
ﻩ notFpList=new ArrayList<String>();
SureFpset=new ArrayList<Kfp>();
ﻩSureFpsetPrio=new ArrayList<Kfp>();
ﻩdao=new Dao();
ﻩ KfpSupport=new HashMap<String, Integer>();
ﻩalsurekfpstr=new ArrayList<String>();
guanlianguize=new HashMap<String,Double>();
ﻩisaddarrStrings=new ArrayList<String>();
ﻩﻩalTransactions=dao、Query("select * from "+table);
ﻩ this、DateSize=alTransactions、size();
ﻩ}
ﻩpublic void ShowkFp(ArrayList<Kfp> SureFpset)
{
ﻩﻩint steptemp=fpstep;
ﻩﻩtextArea、append("频繁"+(steptemp)+"项集\r\n");
ﻩ//System、out、println();
for(int i=0;i<SureFpset、size();i++)
ﻩﻩ{
ﻩ Kfp k=SureFpset、get(i);
ﻩﻩint tempindex=k、index;
ﻩ ﻩString string=String、copyValueOf(k、kfpstr, 0, ++tempindex);
ﻩﻩﻩint support=KfpSupport、get(string);
textArea、append(string+"-----"+support+"-----"+support/DateSize+"\r\n");
ﻩﻩ //System、out、println(string+"\r\n");
ﻩﻩ}
ﻩ}
ﻩpublic void ShowkFp2(HashMap<String,Double> SureFpset)
ﻩ{
ﻩtextArea、append("关联规则\r\n");
ﻩ Set<String> keys=(Set<String>) SureFpset、keySet();
ﻩ for(String keyString:keys)
ﻩ {
ﻩtextArea、append(keyString+"-----------"+SureFpset、get(keyString)+"\r\n");;
ﻩ}
}
public void DataMine()
{
ﻩ int fpsteptemp=0;
ﻩif(fpstep == 1)
ﻩ{
ﻩ ﻩfor(int i=0;i<Apriori、ITEMSIZE;i++)
ﻩﻩ {
ﻩ ﻩﻩKfp kfp=new Kfp();
ﻩkfp、kfpstr[++kfp、index]=(char) ('a'+i);
ﻩkfp、support=0;
ﻩﻩﻩﻩkfp、isfp=false;
alKfps、add(kfp);
}
DealSupport();
ﻩ SaveNotFpBySupport();
SaveSureFp();
ﻩ ﻩShowkFp(alKfps);
fpstep++;
ﻩ }
ﻩﻩwhile(!alKfps、isEmpty())
{
ﻩ ﻩalKfps、clear();
ﻩﻩ for (int i = 0; i < SureFpset、size(); i++)
{
ﻩﻩﻩ Kfp k1 = SureFpset、get(i);
ﻩ for (int j = i + 1; j < SureFpset、size(); j++)
ﻩﻩﻩ{
ﻩ Kfp k2 = SureFpset、get(j);
ﻩ Kfp resultKfp = Joint(k1, k2);
ﻩ int tempindex=resultKfp、index;
ﻩﻩ ﻩﻩString string=String、copyValueOf(resultKfp、kfpstr, 0, ++tempindex);
ﻩ ﻩﻩif(string、charAt(0) == 0)
ﻩﻩﻩ ﻩﻩcontinue;
ﻩﻩﻩﻩﻩSubSet subSet= new SubSet();
ﻩﻩﻩ ArrayList<String> alStrings=subSet、displaySubSet1(string、toCharArray());
ﻩﻩ ﻩﻩint p=0;
ﻩ for(;p<alStrings、size();p++)
ﻩ ﻩﻩ{
ﻩﻩﻩﻩ String string2=alStrings、get(p);
ﻩ ﻩ if(notFpList、contains(string2))
ﻩﻩﻩﻩﻩﻩbreak;
ﻩﻩ}
ﻩ ﻩﻩif(p != alStrings、size())
ﻩﻩ ﻩﻩ continue;
ﻩ ﻩif (!isaddarrStrings、contains(string)) {
ﻩﻩisaddarrStrings、add(string);
ﻩ ﻩ ﻩ alKfps、add(resultKfp);
ﻩﻩ ﻩﻩ}
ﻩﻩﻩﻩ}
ﻩ }
ﻩﻩSureFpsetPrio、clear();
ﻩ for(int i=0;i<SureFpset、size();i++)
ﻩﻩﻩSureFpsetPrio、add(SureFpset、get(i));
ﻩﻩ Guanlianguize();
ﻩ SureFpset、clear();
ﻩ DealSupport();
ﻩ ﻩSaveNotFpBySupport();
ﻩ // Cut();
ﻩﻩif (!alKfps、isEmpty())
ﻩ{
ﻩ ﻩ SaveSureFp();
ShowkFp(SureFpset);
}
ﻩ fpstep++;
ﻩ}
}
ﻩpublic void Guanlianguize()
ﻩ{
ﻩﻩfor(int i=0;i<SureFpsetPrio、size();i++)
ﻩﻩ{
Kfp k=SureFpsetPrio、get(i);
ﻩint len = k、index;
ﻩﻩString string=String、copyValueOf(k、kfpstr, 0, len+1);
ﻩﻩ if(!alsurekfpstr、contains(string))
ﻩﻩ ﻩalsurekfpstr、add(string);
ﻩ }
ﻩ SubSet s=new SubSet();
ﻩfor(int i=0;i<alsurekfpstr、size();i++)
ﻩﻩ{
ﻩﻩﻩString kfpstr=alsurekfpstr、get(i);
ﻩﻩ char []kfpchararr=kfpstr、toCharArray();
ﻩ ﻩArrayList<String> aList=s、SubSet3(kfpchararr,kfpstr、length());
ﻩﻩ for(int j=0;j<aList、size();j++)
ﻩ {
ﻩ String guizetemp="";
ﻩﻩ ﻩString kfpstr1=aList、get(j);
char []kfpchararr1=kfpstr1、toCharArray();
ﻩ int indexinkfp=0;
ﻩﻩﻩ int indexinchararr1=0;
ﻩwhile(indexinkfp < kfpchararr、length && indexinchararr1 < kfpchararr1、length)
ﻩﻩﻩﻩ{
ﻩ ﻩif(kfpchararr1[indexinchararr1] != kfpchararr[indexinkfp])
ﻩﻩﻩﻩ{
ﻩﻩ ﻩ guizetemp=guizetemp+kfpchararr[indexinkfp];
ﻩﻩ ﻩindexinkfp++;
}
ﻩ ﻩ else
{
ﻩﻩ indexinchararr1++;
ﻩﻩﻩﻩ ﻩindexinkfp++;
ﻩ ﻩ }
ﻩ ﻩ}
ﻩﻩﻩ while(indexinkfp < kfpchararr、length)
ﻩﻩﻩguizetemp=guizetemp+kfpchararr[indexinkfp++];
ﻩ ﻩdouble support1=(double)KfpSupport、get(kfpstr);
ﻩﻩﻩdouble support2=(double)KfpSupport、get(kfpstr1);
ﻩﻩ ﻩif(support1/support2 > MinConfi)
ﻩﻩ {
ﻩ ﻩﻩ String temp=kfpstr1+"-------->"+guizetemp;
ﻩﻩ guanlianguize、put(temp,support1/support2);
ﻩﻩ }
ﻩﻩ }
ﻩﻩ}
ﻩﻩShowkFp2(guanlianguize);
alsurekfpstr、clear();
ﻩﻩguanlianguize、clear();
ﻩ}
ﻩpublic Kfp Joint(Kfp k1,Kfp k2)
{
ﻩﻩKfp resultKfp=new Kfp();
ﻩﻩint temp_len=k1、index+1;
ﻩ char temp1[]=new char[temp_len];
ﻩﻩchar temp2[]=new char[temp_len];
ﻩ
展开阅读全文