⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mushroomtestview.cpp

📁 FAST apriori.cpp 基于数组和为运算的apriori算法实现,采用为运算来测试子集的存在性
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// MushroomTestView.cpp : implementation of the CMushroomTestView class
//////////////////////////////////////////////////////////////////////////////
//名	称:MushroomTest
//原有功能:用Apriori算法实现对字符蘑菇 数据库的频繁集的发现
//			改进了子集测试的方法,可以快速的测试子集的存在性
//			用两种不同的显示形式来显示结果
//			提供数据库的主要参数信息
//
//新增功能:
//			利用动态内存分配技术来进行处理,用预先分配内存的数组来存储符合要求的记录的地址
//			并对其进行计数,最后再分配内存,进行处理时,利用原来的数组存储的地址信息获得记录
//			下来,既能对动态的数据进行处理,又可尽量避免浪费内存空间,在时间和空间中取得一个
//			较优的平衡
//
//当前版本: 1.2
//作    者:郭运凯(gyunkai@163.com)
//日期:2006.06.17-17
//
//取代版本: 1.1
//作    者:郭运凯(gyunkai@163.com)
//日期:2006.06.16-17
/////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "MushroomTest.h"
#include "MushroomTestSet.h"
#include "MushroomTestDoc.h"
#include "MushroomTestView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMushroomTestView
IMPLEMENT_DYNCREATE(CMushroomTestView, CRecordView)
BEGIN_MESSAGE_MAP(CMushroomTestView, CRecordView)
	//{{AFX_MSG_MAP(CMushroomTestView)
	ON_BN_CLICKED(IDC_Bn_FreqItem, OnBnFreqItem)
	ON_BN_CLICKED(IDC_para_set, Onparaset)
	ON_BN_CLICKED(IDC_show_supp, Onshowsupp)
	ON_BN_CLICKED(IDC_show_supp_count, Onshowsuppcount)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CRecordView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CRecordView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CRecordView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMushroomTestView construction/destruction
CMushroomTestView::CMushroomTestView()
	: CRecordView(CMushroomTestView::IDD)
{
	//{{AFX_DATA_INIT(CMushroomTestView)
	m_pSet = NULL;
	m_min_supp = 0.2f;			//初始化最小支持度为0.2
	m_total_num = 0;			//记录的总条数
	m_min_supp_count = 0;		//最小支持度数
	m_show_message = _T("");	//显示状态信息
	show_supp_count=true;		//显示结果中以最小指出度数来显示
	m_run_time = 0.0;			//运行时间
	//}}AFX_DATA_INIT
	// TODO: add construction code here
}
CMushroomTestView::~CMushroomTestView()
{
	delete [] DB;//释放内存
	delete [] C;//释放内存
	delete [] L;//释放内存
}
void CMushroomTestView::DoDataExchange(CDataExchange* pDX)
{
	CRecordView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CMushroomTestView)
	DDX_Control(pDX, IDC_List_FreqItem, m_List_FreqItem);
	DDX_Text(pDX, IDC_min_supp, m_min_supp);
	DDV_MinMaxFloat(pDX, m_min_supp, 0.15f, 1.f);
	DDX_Text(pDX, IDC_total_num, m_total_num);
	DDX_Text(pDX, IDC_min_supp_count, m_min_supp_count);
	DDX_Text(pDX, IDC_show_message, m_show_message);
	DDX_Text(pDX, IDC_run_time, m_run_time);
	//}}AFX_DATA_MAP
}
BOOL CMushroomTestView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs
	return CRecordView::PreCreateWindow(cs);
}
void CMushroomTestView::OnInitialUpdate()
{
	m_pSet = &GetDocument()->m_mushroomTestSet;
	CRecordView::OnInitialUpdate();
	GetParentFrame()->RecalcLayout();
	ResizeParentToFit();
}
/////////////////////////////////////////////////////////////////////////////
// CMushroomTestView printing
BOOL CMushroomTestView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}
void CMushroomTestView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}
void CMushroomTestView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CMushroomTestView diagnostics
#ifdef _DEBUG
void CMushroomTestView::AssertValid() const
{
	CRecordView::AssertValid();
}
void CMushroomTestView::Dump(CDumpContext& dc) const
{
	CRecordView::Dump(dc);
}
CMushroomTestDoc* CMushroomTestView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMushroomTestDoc)));
	return (CMushroomTestDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMushroomTestView database support
CRecordset* CMushroomTestView::OnGetRecordset()
{
	return m_pSet;
}
/////////////////////////////////////////////////////////////////////////////
// CMushroomTestView message handlers
void CMushroomTestView::HashDB()
{
	//////////////////////////////////////////////////////////////////////////////
	//名称:HashDB
	//功能:对数据库进行扫描,得到数据库的各个记录的信息,为
	//		数字化测试子集做基础
	//日期:2006.06.16-17
	/////////////////////////////////////////////////////////////////////////////
	int m='z';
	int n;
	int k;
	long i;
	char D[24];
	CString strtemp;
	DB=new int[nDbItemCount+1];//用来保存对数据库扫描后得到的信息数值
	if(!DB)
		MessageBox("初始化失败!");
	m_pSet->MoveFirst();
	i=1;
	while (! m_pSet->IsEOF())
	{
		strtemp= m_pSet->m_item1 + m_pSet->m_item2+ m_pSet->m_item3 + m_pSet->m_item4 +
			m_pSet->m_item5 + m_pSet->m_item6 + m_pSet->m_item7 + m_pSet->m_item8 +
			m_pSet->m_item9 + m_pSet->m_item10 + m_pSet->m_item11 + m_pSet->m_item12 +
			m_pSet->m_item13 + m_pSet->m_item14 + m_pSet->m_item15 + m_pSet->m_item16 +
			m_pSet->m_item17 + m_pSet->m_item18 + m_pSet->m_item19 + m_pSet->m_item20 +
			m_pSet->m_item21 + m_pSet->m_item22 + m_pSet->m_item23;
	/*strtemp= m_pSet->m_item1 + m_ps + m_pset->m_item3 + m_pset->m_item4;
			m_pset->m_item5 + m_pset->m_item6 + m_pset->m_item7 + m_pset->m_item8 +
			m_pset->m_item9 + m_pset->m_item10 + m_pset->m_item11 + m_pset->m_item12 +
			m_pset->m_item13 + m_pset->m_item14 + m_pset->m_item15 + m_pset->m_item16 +
			m_pset->m_item17 + m_pset->m_item18 + m_pset->m_item19 + m_pset->m_item20 +
			m_pset->m_item21 + m_pset->m_item22 + m_pset->m_item23;*/
		//在对	m_pSet 进行整体修改(局部查找替换)时,不留意,把S小写了,造成23处错误,即m_pset 无法识别
		//essageBox(strtemp);
		n=strlen(strtemp);
		strcpy(D,strtemp);
		DB [i]=0;
		for (int j=0;j<n;j++)
		{
			k=1;
			DB[i]+=k<<(int)(m-D[j]);
		}
		m_pSet->MoveNext();
	//	strtemp.Format("%s%d%s%d","DB[",i,"]=",DB[i]);
	//	MessageBox(strtemp,NULL,MB_OK);
		i++;//注意 在这里要对i加1,原来的程序中由于循环时自动对其加1,现在的循环
		//中没有对其修改的表到式,导致了i一直是1,使DB[i]无法在新的地址保存新的值
	}
}
void CMushroomTestView::check_supp(int num,int no)
{
	//////////////////////////////////////////////////////////////////////////////
	//名称:check_supp(int num,int no)
	//功能:数字化测试子集,num是要测试的记录的总条数
	//		no子集的长度
	//日期:2006.06.16-17
	/////////////////////////////////////////////////////////////////////////////
	CString  strtemp;
	int k,m;
	long i,j;
    int check;
	m='z';
	for(i=1;i<=num;i++)//for1
	{
		check=0;
		C[i].min_supp_count=0;
		for (j=0;j<no;j++)//for2
		{
			k=1;
			check+=(int)(k<<(m-C[i].item[j]));
		}//end for2
		for (j=1;j<=nDbItemCount;j++)//for3
		{
			if (check==(check&DB[j]))
			{
				C[i].min_supp_count+=1;//子集存在,支持度数加1
			}
		}//end for3
			//strtemp.Format("%s%d%s%s%s%d","C[",i,"]=",C[i].item,"   ",C[i].min_supp_count);
		//	MessageBox(strtemp,NULL,MB_OK);
	}//end for1
}//end check_supp(int num,int no)
void CMushroomTestView::C1()
{
	//////////////////////////////////////////////////////////////////////////////
	//名称:C1()
	//功能:初始化候选集数组,并测试1项候选集的支持度数
	//日期:2006.06.16-17
	/////////////////////////////////////////////////////////////////////////////
	C=new C_Node [27];
	strcpy(C[1].item,"a");
	strcpy(C[2].item,"b");
	strcpy(C[3].item,"c");
	strcpy(C[4].item,"d");
	strcpy(C[5].item,"e");
	strcpy(C[6].item,"f");
	strcpy(C[7].item,"g");
	strcpy(C[8].item,"h");
	strcpy(C[9].item,"i");
	strcpy(C[10].item,"j");
	strcpy(C[11].item,"k");
	strcpy(C[12].item,"l");
	strcpy(C[13].item,"m");
	strcpy(C[14].item,"n");
	strcpy(C[15].item,"o");
	strcpy(C[16].item,"p");
	strcpy(C[17].item,"q");
	strcpy(C[18].item,"r");
	strcpy(C[19].item,"s");
	strcpy(C[20].item,"t");
	strcpy(C[21].item,"u");
	strcpy(C[22].item,"v");
	strcpy(C[23].item,"w");
	strcpy(C[24].item,"x");
	strcpy(C[25].item,"y");
	strcpy(C[26].item,"z");
	C[0].min_supp_count=26;  //1 项候选集的个数,在本算法中,用C[0].min_supp_count来保存候选集Cn的个数
	check_supp(26,1);
}  //end of  C1()
void CMushroomTestView::Cn(int n)
{
	//////////////////////////////////////////////////////////////////////////////
	//名称:Cn(int n)
	//功能:用频繁集Ln-1为基础,通过连接得到n项候选集Cn,并测试n项候选集的支持度数
	//日期:2006.06.16-17

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -