Apriori (C++实现)

这篇博客介绍了如何使用C++实现Apriori算法,处理包含abcdefi字母的约10000条数据。文章提到采用下三角矩阵存储频繁一二项集,并且只需扫描数据库一次。虽然最初实现是在找出频繁高阶项集时逐次遍历数据,但作者指出可以优化为一次性找出所有频繁项集。此外,实现了与MySQL数据库的集成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文实现Apriori算法,数据库为abcdefi七个字母组成的10000条左右的数据,频繁一二项集用下三角矩阵存储,并一共只扫描一次数据库,(其实第一次扫描数据库后取出长度大于3的数据,供后期候选项集找频繁项集使用)。

我实现时是由于别人的要求,在找出候选三项集后遍历一次数据找出频繁三项集,在找出候选四项集后遍历一次数据找出频繁四项集...,其实可以找出所有的候选项集后再一次性找出所有频繁项集。

本人在实现是使用Mysql数据库,大家可以自己随机生成1000条数据,如果有需要我的数据,可以联系我~~


#include <iostream>
#include <time.h>
#include "winsock.h"
#include "mysql.h"
#include <atlstr.h>
#include "vector"
#include "string"
#include <iomanip>//不要忘记包含此头文件
using namespace std ;


int count = 0; //count 是数据量
#define  SUPPORT  0.1
#define  Confidence  0.63
double Soupport_Number;  //支持度
int Candidate_itemsets_count = 3;
int Frequent_itemsets_count = 1;

vector<string> Database;//前一次的数据(初始为长度小于3)
vector<string> Database_Cut;//修剪后的数据
vector<string> All_Frequent_itemsets_ID; //所有频繁项集
vector<int> All_Frequent_itemsets_Int; //所有频繁项集频度
vector<string> Association_Rule_ID; //关联规则
vector<float> Association_Rule_Float; //关联规则置信度
vector<string> Candidate_Association_Rule_ID; //候选关联规则
vector<float> Candidate_Association_Rule_Float; //候选关联规则置信度

//第一步:固定矩阵(10*10)
int row_num = 10; //固定大小
int col_num = 10; //固定大小
 //将数据库中每一条数据中的一项和二项累积存放在下三角

vector<vector<int>> matrix(row_num, vector<int>(col_num, 0)); //矩阵


vector<string> First_Frequent_itemsets_ID;  //频繁一项集球员ID
vector<int> First_Frequent_itemsets_int;  //频繁一项集频数

vector<string> Second_Frequent_itemsets_ID;  //频繁二项集球员ID
vector<int> Second_Frequent_itemsets_int;  //频繁二项集频数

vector<string> Other_Frequent_itemsets_ID;  //其他频繁项集球员ID
vector<int> Other_Frequent_itemsets_int;  //其他频繁项集频数

vector<string> Read_MySql_Data(vector<string> Database) ; //读取MySQL数据
vector<vector<int>> StorageData(string Set, vector<vector<int>> matrix);
void print_Matrix(vector<vector<int>> matrix); //打印一次下三角矩阵
bool StringA_IsOf_StringB(string database_string,string item_string); //判断字符串database_string是否包含item_string
void find_First_Frequent_itemsets(); //找出频繁一项集
void find_Second_Frequent_itemsets(); //找出频繁二项集
void pint_Candidate_itemsets(vector<string> Candidate_itemsets_ID,vector<int> Candidate_itemsets_int); //打印候选项集
void pint_Frequent_itemsets(vector<string> Frequent_itemsets_ID,vector<int> Frequent_itemsets_int); //打印频繁项集
void find_Candidate_Association_Rule_ID(vector<string> All_Frequent_itemsets_ID,vector<int> All_Frequent_itemsets_Int); //找出候选关联规则
void find_Association_Rule_ID(vector<string> Candidate_Association_Rule_ID,vector<float> Candidate_Association_Rule_Float); //找出关联规则

vector<string> find_Other_Candidate_itemsets(vector<string> Precede_Frequent_itemsets_ID); //找出候选项集(并成功剪枝)
void find_Other_Frequent_itemsets(vector<string> Other_Candidate_itemsets_ID); //扫描修剪后的数据库(向量),找出频繁项集
string Is_Or_Not_Candidate_itemset(vector<string> Precede_Frequent_itemsets_ID,string string1,string string2); //判断string1与string2自连接生成的项集是否是候选项集

void main ()
{
	//
	clock_t start,finish;
   double totaltime;
   start=clock();

	
	Database = Read_MySql_Data(Database);



	find_First_Frequent_itemsets(); //找出频繁一项集

	find_Second_Fr
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值