📄 csp.cpp
字号:
#include "stdafx.h"
#include"csp.h"
Ccsp::Ccsp()
{
seqNumber=0;
num=0;
m_MaxCode[0] = 0;
m_MaxCode[1] = 0x1;
m_MaxCode[2] = 0x3;
m_MaxCode[3] = 0x7;
m_MaxCode[4] = 0xF;
m_MaxCode[5] = 0x1F;
m_MaxCode[6] = 0x3F;
m_MaxCode[7] = 0x7F;
m_MaxCode[8] = 0xFF;
m_MaxCode[9] = 0x1FF;
m_MaxCode[10] = 0x3FF;
m_MaxCode[11] = 0x7FF;
m_MaxCode[12] = 0xFFF;
m_MaxCode[13] = 0x1FFF;
m_MaxCode[14] = 0x3FFF;
m_MaxCode[15] = 0x7FFF;
m_MaxCode[16] = 0xFFFF;
m_MaxCode[17] = 0x1FFF;
m_MaxCode[18] = 0x3FFFF;
m_MaxCode[19] = 0x7FFFF;
m_MaxCode[20] = 0xFFFFF;
m_MaxCode[21] = 0x1FFFFF;
m_MaxCode[22] = 0x3FFFFF;
m_MaxCode[23] = 0x7FFFFF;
m_MaxCode[24] = 0xFFFFFF;
m_MaxCode[25] = 0x1FFFFFF;
m_MaxCode[26] = 0x3FFFFFF;
m_MaxCode[27] = 0x7FFFFFF;
m_MaxCode[28] = 0xFFFFFFF;
m_MaxCode[29] = 0x1FFFFFFF;
m_MaxCode[30] = 0x3FFFFFFF;
m_MaxCode[31] = 0x7FFFFFFF;
}
void Ccsp::printtree(node *start)
{
// For testing: print the whole WAP tree
if (start->lSon !=NULL)
{
cout<<"event:"<<start->event<<" occurrence = "<< start->occur<<". the son is "<<(start->lSon)->event;
if(start->event != -1) cout<<".... its parent is "<<(start->parent)->event;
cout<<endl;
printtree(start->lSon);
}
if (start->rSibling != NULL)
{
cout<<"event:"<<start->event<<" the sibling is "<< (start->rSibling)->event <<"; the occrrence are "<<(start->rSibling)->occur<<endl;
printtree(start->rSibling);
}
}
void Ccsp::MiningProcess(node *start)
{
for(list<linkheader>::reverse_iterator i = lnkhdr.rbegin(); i != lnkhdr.rend(); i++)
{
//ofstream middle("middle.data",ios::trunc);
node * linkTranversal = i->link;
if( i->support>=minSupp)
{
node * subLink;//, * prefixRoot;
bool firstTime = true;
node *Tranversal, *newNode, *Parent;//, *lastLinkage;
node *root1 = new node;
// linkheader *newLinkHeader;
// bool newLink;
root1->event = -1;
root1->occur = -1;
root1->parent = NULL;
root1->lSon = NULL;
root1->rSibling = NULL;
root1->nextLink = NULL;
while( linkTranversal != NULL)
{
node *patternBrow, *subPatternBrow;
queue<int> pattern, subPattern;
int subCount, pattLength, subLength=0;
patternBrow = linkTranversal;
pattLength = 0;
Tranversal=root1;
int count=patternBrow->occur;
int max=0;
while( patternBrow != start)
{
// pattern.push(patternBrow->event);
pattLength++;
Parent = Tranversal;
// cout<<"event:"<<patternBrow->event;
// BuildTree1(patternBrow->occur,patternBrow->event);
{ ///////////
// list<linkheader>::iterator lnkBrow = lnkhdr.begin();
if( Tranversal->lSon == NULL)
{
newNode = new node;
newNode->event = patternBrow->event;
newNode->occur = count;
newNode->lSon = NULL;
newNode->rSibling = NULL;
newNode->parent = Parent;
Tranversal->lSon = newNode;
Tranversal = newNode;}
else
{
Tranversal = Tranversal->lSon;
if ( Tranversal->event == patternBrow->event)
Tranversal->occur = Tranversal->occur + count;
else
{
bool find= false;
while(Tranversal->rSibling != NULL && !find )
{
Tranversal = Tranversal->rSibling;
if ( Tranversal->event == patternBrow->event)
{
Tranversal->occur = Tranversal->occur + count;
find = true;
}
}
if (!find)
{
newNode = new node;
newNode->event = patternBrow->event;
newNode->occur = count;
newNode->lSon = NULL;
newNode->rSibling = NULL;
newNode->parent = Parent;
Tranversal->rSibling = newNode;
Tranversal = newNode;
}
}
}
}////////
if(pattLength>1&&patternBrow->event == linkTranversal->event)
{
subLength = 1;
subLink=linkTranversal->parent;
subPatternBrow = patternBrow->parent;
while(subLink->event == subPatternBrow->event&&subPatternBrow!=start)
{
subLength++;
subLink = subLink->parent;
subPatternBrow = subPatternBrow->parent;
}
}
if(subLength>max)
max = subLength;
patternBrow = patternBrow->parent;
}
// cout<<" occur"<<count<<endl;
max=0;
if(max>0)
{
Tranversal=root1;
subCount = linkTranversal->occur * (-1);
subCount=0;
patternBrow = linkTranversal;
int t=max;
while( t > 0 )
{
// subPattern.push(patternBrow->event);
t--;
// cout<<"event:"<<patternBrow->event;
Parent = Tranversal;
// BuildTree1(subCount,patternBrow->event);
//{ ///////////???????
// list<linkheader>::iterator lnkBrow = lnkhdr.begin();
if( Tranversal->lSon == NULL)
{
newNode = new node;
newNode->event = patternBrow->event;
newNode->occur = subCount;
newNode->lSon = NULL;
newNode->rSibling = NULL;
newNode->parent = Parent;
Tranversal->lSon = newNode;
Tranversal = newNode;}
else
{
Tranversal = Tranversal->lSon;
if ( Tranversal->event == patternBrow->event)
Tranversal->occur = Tranversal->occur + subCount;
else
{
bool find= false;
while(Tranversal->rSibling != NULL && !find )
{
Tranversal = Tranversal->rSibling;
if ( Tranversal->event == patternBrow->event)
{
Tranversal->occur = Tranversal->occur + subCount;
find = true;
}
}//while
if (!find)
{
newNode = new node;
newNode->event = patternBrow->event;
newNode->occur = subCount;
newNode->lSon = NULL;
newNode->rSibling = NULL;
newNode->parent = Parent;
Tranversal->rSibling = newNode;
Tranversal = newNode;
}
}//else
}//else
// }
patternBrow=patternBrow->parent; }
// cout<<" count "<<subCount<<endl;
}//while
linkTranversal = linkTranversal->nextLink;
}//if */
//cout<<"dddddd"<<endl;
// printtree(root1);
// cout<<"dddddd"<<endl;
//root1=root1->lSon;
DepthSearch(root1);
DeleteAllItems(root1) ;
}
}
// ofstream result("result_WAP.data", ios::app);
// result<<"一部分完毕"<<endl;
}
void Ccsp::DeleteAllItems(node* boot)
{
if(boot->lSon!=NULL)
DeleteAllItems(boot->lSon);
if(boot->rSibling!=NULL)
DeleteAllItems(boot->rSibling);
free(boot);
}
node* Ccsp::BuildTree(unsigned char **pixel,int x,int y)
{
int count=1;
unsigned char event;
// int cid, number;
linkheader *newLinkHeader;
bool newLink;
node *Tranversal, *newNode, *Parent, *lastLinkage;
node *root = new node;
root->event = -1;
root->occur = -1;
root->parent = NULL;
root->lSon = NULL;
root->rSibling = NULL;
root->nextLink = NULL;
// AfxMessageBox("start");
for(int i=0;i<y;i++)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -