资源简介
FP-TREE算法 C++实现 包含源代码和测试数据集
代码片段和文件信息
//FP增长树2007-07-12 19:41/******fp增长算法求出频繁项集
/****fp增长算法:****************
(1)计算各个项的支持度,按降序排列
(2)把各个事务的项按(1)的顺序排列
(3)改变各个共根项的计数
(4)以各个单项为尾计算各个频繁项集
**************************************/
#include
#include
#include
#include
#include
using namespace std;
vector > VVCHAR;//存放一个集合的所有子集
vector IS_NOT; //记录各个元素的选与未选
//const static SUPPORT=2; //支持度
/********返回一个序列中最大元素的索引号******/
int max_index(const vector & ivec)
{
int max_num=-100;
int index;
for(int i=0;i {
if(ivec[i]>max_num)
{
max_num=ivec[i];
index=i;
}
}
return index;
}
//从各个事务的项集中得到数据库的所有单个项并按支持度排成降序
vector reverse_unique_item(const vector > & vvchar )
{
vector cvec;
vector count;
vector reverse_cvec;
for(int i=0;i {
for(int j=0;j {
vector::iterator iter;
//找不到说明前面没有重复的单项
if((iter=find(cvec.begin()cvec.end()vvchar[i][j]))==cvec.end())
{
cvec.push_back(vvchar[i][j]);
count.push_back(1);
}
else
{
count[iter-cvec.begin()]+=1;//在重复元素对应的计数位置加1
}
}
}
/******每次从序列中选出支持度最大的项加入倒序序列(不断删除最大元素)*****/
while(count.size()>0)
{
int index=max_index(count);
reverse_cvec.push_back(cvec[index]);
cvec.erase(cvec.begin()+index);
count.erase(count.begin()+index);
}
return reverse_cvec;
}
/*******排列各个事务中的项集,参见单项的降序序列*****/
void sort_transaction(const vector &reverse_cvec
vector > &vvchar)
{
for(int i=0;i {
vector count;
for(int j=0;j {
vector::const_iterator iter;
iter=find(reverse_cvec.begin()reverse_cvec.end()vvchar[i][j]);
count.push_back(iter-reverse_cvec.begin());//得到该事务各个项在倒序序列的序号
}
vector tmp=vvchar[i];//该事务的副本
vector reverse_tmp;//该事务的倒序序列
while(count.size()>0)
{
int index=max_index(count);
reverse_tmp.push_back(tmp[index]);
tmp.erase(tmp.begin()+index);
count.erase(count.begin()+index);
}
reverse(reverse_tmp.begin()reverse_tmp.end());
vvchar[i]=reverse_tmp;//得到倒序序列中的顺序
}
}
/********两个分支进行比较,检查2个分支开头有多少项相同******/
int root_location(const vector & vchar1 const vector & vchar2)
{
int i;
for(i=0;i {
// cout<<“++++++++++++++++++++“;
// cout< // cout< if(vchar1[i]!=vchar2[i])
{
break;
}
}
return i;
}
/*********改变各个共根项的计数,形成逻辑上的fp树********/
void count_root(const vector > & vvchar
vector > & vvint)
{
//初始化,分支上各个单项的计数都为1
for(int i=0;i {
vector ivec;
for(int j=0;j {
//cout< ivec.push_back(1);
}
vvint.push_back(ivec);
}
for(int k=0;k {
for(int j=k+1;j {
int index=root_location(vvchar[k]vvchar[j]);
if(index!=0)
{
for(
相关资源
- 近代优化方法利用C++编写的PRP共轭梯
- 三子连珠游戏VC++程序
- 随机线性网络编码和确定线性网络编
- C++仿QQ界面
- 开发一个VC++证券模拟交易系统源代码
- Em算法实现聚类(VC++实现)
- C++ 实现的 LISP 编译器
- 霍夫曼编码C++实现
- 新安江模型C++代码 VS2008平台下
- 邓俊辉数据结构c++版视频资源全集
- 网络编程c++ 获得服务器端文件目录名
- 人脸识别c++代码
- 多线程C++爬虫程序
- 车牌识别系统从车牌定位、字符分割
- qwebchannel分组与JS相互发送消息的
- C++ 实现屏幕水印
- c++封装curl,实现getpostdownload
- C++课程和项目开发实战视频
- Linux下串口通讯程序C++源代码
- c语音识别程序
- 优化排样问题矩形排样C++
- C++工具类-常用工具类源码
- C/C++经典约瑟夫环问题——带头结点的
- Visual C++项目开发案例全程实录光盘源
- 数据结构 迷宫问题 C++ 栈方法
- C++程序设计教程 第二版 清晰版 带完
- VC++ DES 加密解密算法
- 运行c/c++程序时缺少mex.h
- K-means聚类算法的C++实现
- 中南大学信息院C++课程设计报告
评论
共有 条评论