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

📄 csp.cpp

📁 CSP算法也是关联规则这方面的一个重要的算法,可根据需要下载使用
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#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 + -