亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? l maxfpminer.cpp

?? 最大頻繁項集挖掘算法。運行前需將release中的data和result數據拷貝到上一級目錄下。
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
						pBlock=new FPTREENODE[MINNODECOUNT];
						pMemory->pMBlock=pBlock;
						nNodeCount=0;
					}
					pQuery=pBlock+nNodeCount;
					nNodeCount++;
					nFptreeNodeCount++;
  					pQuery->nNumber=nN+nItemCount;
					pQuery->fFrequency=1;
					pQuery->pHorizon=pQuery;

					// Set ancestor-node
					pAnces->pVertical=pQuery;
					pAnces=pQuery;

					// Inspect next item
					arrnTick[i]=0;
					i++;
				}

				// End vertical link
				pAnces->pVertical=0;

				break;
			}

			// Have finded it
			pQuery->fFrequency++;
			pAnces=pQuery;

			// Inspect next item
			arrnTick[i]=0;
			i++;
		}while(i<=nCount);
	}

	// Close the opened file
	fclose(fileData);

	// Print the number of nodes in fptree
	printf("%u nodes, %u frequent items ... ",nFptreeNodeCount,nItemCount);
	fprintf(fileResult,"Count of frequent item: %u\n\n",nItemCount);

	// Free allocated memory
	delete[]arrnTick;

	// Reverse ancestor-link and create horizontal link
	ReverseLink();
}

// Reverse ancestor-link and create horizontal link
void ReverseLink()
{
	FPTREENODE **arrpNode,*pNode,*pRear;
	unsigned nP;

	// Check tree is void
	if(!pRoot->pVertical) return;

	// Create used type and initialize it
	arrpNode=new FPTREENODE *[nFPMaxlength+1];
	pNode=pRoot;
	nP=0;

	// Reversing process
	while(1)
	{
		// Brother-link not end
		if(pNode)
		{
			pRear=pNode->pVertical;
			while(pRear)
			{
				arrpNode[nP]=pNode;

				pNode=pRear->pHorizon;
				pRear->pHorizon=0;
				pRear->nNumber-=nItemCount;
				nP++;

				pRear=pNode->pVertical;
			}
		}

		// Brother-link end
		else{
			nP--;
			if(!nP) break;
			pNode=arrpNode[nP];
		}

		// Link it to horizontal link
		pRear=pNode->pHorizon;
		pNode->pHorizon=arrpFpHorizon[pNode->nNumber];
		arrpFpHorizon[pNode->nNumber]=pNode;

		// Set ancestor
		pNode->pVertical=arrpNode[nP-1];

		// Deal with next brother-branch
		pNode=pRear;
	}

	// Free allocated memory
	delete[]arrpNode;
}

/*  Searching remark:
		The next level's nodes' frequencys based on larger numbers
	are zeroed by us before being searched. While all nodes' frequencys
	and	horizontal links oughtn't to be changed, we do it in two steps.
	First, adding frequency to array according to every number in nodes
	when searching ; Second, while searching the nodes, change information
	of every needed changing node of deeper level by checking its frequency
	in frequency array according to every item's number in nodes
*/
// Searching algorithm
void MiningMaxfp()
{
	unsigned i,nP,nDepth,*arrnStart,nStart,nEnd,nMiddle;
	unsigned _int64 arr2Powers[64];
	unsigned *arrnFreqOrders,nFreqCount;
	FPTREENODE *pS_Node,*pS_Horizon,**arrpPattern;
	FPTREENODE *pM_Node,*pV_Ances,*pM_Insert;
	MEMORYBLOCK *pTempMemory;
	FREQ_TYPE fH_Frequency,fS_Support;

	// Cuculate 2' powers
	arr2Powers[0]=1;
	for(i=1;i<64;i++) arr2Powers[i]=arr2Powers[i-1]+arr2Powers[i-1];

	// Allocate pattern nodes and initialize
	nTotalMined=1;
	nMaxfpCount=1;
	arrpPattern=new FPTREENODE *[nFPMaxlength+1];
	arrnStart=new unsigned[nFPMaxlength+1];
	arrnFreqOrders=new unsigned[nFPMaxlength+2];
	arrnFreqOrders[0]=nItemCount+1;
	arrnStart[0]=1;
	pNodeRecycle=0;
	arrpPattern[0]=pM_Root;
	arrfFreq[nItemCount+1]=fSupport;
	nDepth=0;
	nP=nItemCount+1;
	nStart=1;

	// Initialize max-pattern tree node count
	nMptreeNodeCount=1;
	pHeaders=new FPTREENODE[nFPMaxlength];

	// Initialize insert pointer
	pM_Insert=pM_Root;

	// Searching process
	while(1)
	{
		// Initialize frequent orders
		nFreqCount=0;
		fS_Support=arrfFreq[nStart];
		while(nStart<=nP)
		{
			if(arrfFreq[nStart]>=fSupport)
			{
				arrnFreqOrders[++nFreqCount]=nStart;
				if(nFreqCount>nFPMaxlength) break;
			}
			nStart++;
		}

		// Find the possible long continuous frequent order set,
		// and insert it into max-pattern tree
		nStart=2;
		nEnd=nFreqCount-1;
		nP=1;
		while(nStart<=nEnd)
		{
			nMiddle=(nStart+nEnd)/2;
			pS_Horizon=arrpFpHorizon[arrnFreqOrders[nMiddle]];
			fH_Frequency=0;
			while(pS_Horizon)
			{
				// Get information in horizontal node
				pS_Node=pS_Horizon->pVertical;
				i=nMiddle-1;

				// Change information of every node
				while(1)
				{
					if(pS_Node->nNumber<arrnFreqOrders[i]) break;

					if(pS_Node->nNumber==arrnFreqOrders[i]) i--;

					pS_Node=pS_Node->pVertical;
				}

				// Caculate support
				if(!i) fH_Frequency+=pS_Horizon->fFrequency;

				// Go to next path
				pS_Horizon=pS_Horizon->pHorizon;
			}

			// Deal with the result
			if(fH_Frequency>=fSupport)
			{
				nP=nMiddle;
				fS_Support=fH_Frequency;
				nStart=nMiddle+1;
			}
			else nEnd=nMiddle-1;
		}

		// Insert the pattern into max-pattern tree
		for(i=nP;i>0;i--)
		{
			// Create the node for a pattern
			if(pNodeRecycle)
			{
				pM_Node=pNodeRecycle;
				pNodeRecycle=pNodeRecycle->pVertical;
			}
			else{
				if(nNodeCount==MINNODECOUNT)
				{
					pTempMemory=pMemory;
					pMemory=new MEMORYBLOCK;
					pMemory->pNext=pTempMemory;
					pBlock=new FPTREENODE[MINNODECOUNT];
					pMemory->pMBlock=pBlock;
					nNodeCount=0;
				}
				pM_Node=pBlock+nNodeCount;
				nNodeCount++;
			}
			nMptreeNodeCount++;
			pM_Node->nNumber=arrnFreqOrders[i];
			pM_Node->pHorizon=pRoot;

			pM_Insert->pVertical=pM_Node;
			pM_Insert=pM_Node;
		}

		// pattern information
		pM_Insert->pVertical=0;
		pM_Insert->fFrequency=arrfFreq[arrnFreqOrders[nP]];

		// Caculate pattern count
		nTotal+=arr2Powers[nP];

		// Initialize next frequent order
		nP=arrnFreqOrders[nP+1];

		while(1)
		{
			if(nP==(pV_Ances=arrpPattern[nDepth])->nNumber)
			{
				// Mining process completes
				if(!nDepth) break;

				// Compare two trees and eliminate same branches
				EliminateBranches(pV_Ances,arrpPattern[nDepth-1]);

				// Find next frequent order
				while(arrfFreq[++nP]<fSupport);

				nDepth--;

				continue;
			}

			// Calculate total number of frequent patterns
			nTotalMined++;
			nMaxfpCount++;

			// Clear information in head talbes before building subtree
			nStart=arrnStart[nDepth];
			for(;nStart<nP;nStart++)
			{
				arrfFreq[nStart]=0;
				arrpFpHorizon[nStart]=0;
			}

			// Build subtree
			nStart=arrnStart[nDepth];
			pS_Horizon=arrpFpHorizon[nP];
			while(pS_Horizon)
			{
				// Get information in horizontal node
				fH_Frequency=pS_Horizon->fFrequency;
				pS_Node=pS_Horizon->pVertical;

				// Change information of every node
				while(pS_Node->nNumber>=nStart)
				{
					// Check if the node's frequency isn't less than
					if(pS_Node!=arrpFpHorizon[pS_Node->nNumber])
					{
						// Link it to horizontal link
						pS_Node->pHorizon=arrpFpHorizon[pS_Node->nNumber];
						arrpFpHorizon[pS_Node->nNumber]=pS_Node;

						// Add frequency to sub-tree node
						pS_Node->fFrequency=fH_Frequency;

						arrfFreq[pS_Node->nNumber]+=fH_Frequency;

						// Go to next node
						pS_Node=pS_Node->pVertical;

						continue;
					}

					// Add frequency to sub-tree node
					pS_Node->fFrequency+=fH_Frequency;
					arrfFreq[pS_Node->nNumber]+=fH_Frequency;

					pS_Node=pS_Node->pVertical;

					// Continue the process
					while(pS_Node->nNumber>=nStart)
					{
						// Add frequency to sub-tree node
						pS_Node->fFrequency+=fH_Frequency;

						arrfFreq[pS_Node->nNumber]+=fH_Frequency;

						// Go to next node
						pS_Node=pS_Node->pVertical;
					}

					break;
				}

				// Go to next horizontal node
				pS_Horizon=pS_Horizon->pHorizon;
			}

			// Find current level start point
			// and clear useless information
			while(arrfFreq[nStart]<fSupport)
			{
				arrpFpHorizon[nStart]=0;
				arrfFreq[nStart++]=0;
			}

			// Insert pattern ended with nP
			// Create the node for a pattern
			if(pNodeRecycle)
			{
				pM_Insert=pNodeRecycle;
				pNodeRecycle=pNodeRecycle->pVertical;
			}
			else{
				if(nNodeCount==MINNODECOUNT)
				{
					pTempMemory=pMemory;
					pMemory=new MEMORYBLOCK;
					pMemory->pNext=pTempMemory;
					pBlock=new FPTREENODE[MINNODECOUNT];
					pMemory->pMBlock=pBlock;
					nNodeCount=0;
				}
				pM_Insert=pBlock+nNodeCount;
				nNodeCount++;
			}
			nMptreeNodeCount++;
			pM_Insert->nNumber=nP;
			pM_Insert->pHorizon=pV_Ances->pVertical;
			pV_Ances->pVertical=pM_Insert;

			// Deal with the result

			// The pattern can be longered
			if(nStart!=nP)
			{
				arrpPattern[++nDepth]=pM_Insert;
				arrnStart[nDepth]=nStart;

				break;
			}

			// Calculate total number of frequent patterns
			nTotal++;

			// Current pattern end
			pM_Insert->pVertical=0;
			pM_Insert->fFrequency=arrfFreq[nP];

			// Check orders in upper level
			while(arrfFreq[++nP]<fSupport);
		}

		// Mining process end
		if(!nDepth) break;
	}

	// Contract last block
	realloc(pBlock,nNodeCount*sizeof(FPTREENODE));

	// Print node count max-pattern tree
	printf("%u max-pattern tree nodes ... ",nMptreeNodeCount);

	// Print max-patterns
	PrintMaxpatterns();

	// Free pattern array
	delete[]arrpPattern;
	delete[]arrnStart;
	delete[]arrnFreqOrders;
	delete[]pHeaders;
}

// Compare two tree and eliminate same branches
bool EliminateBranches(FPTREENODE *pV_Root, FPTREENODE *pH_Root)
{
	static FPTREENODE *pHeader=pHeaders;
	FPTREENODE *pV_Horizon,*pH_Horizon,*pEndNode;

	// Initialization

	// Ensure a unempty tree
	pH_Horizon=pH_Root->pVertical;
	if(!pH_Horizon)
	{
		nMaxfpCount--;
		return true;
	}

	pV_Horizon=pV_Root->pVertical;
	if(!pV_Horizon) return false;

	// Create header node
	pHeader++;
	pEndNode=pHeader;

	// Nodes matching in the two horizontal links
	while(1)
	{
		// Matching in right branches
		while(pV_Horizon->nNumber<pH_Horizon->nNumber)
		{
			pEndNode->pHorizon=pH_Horizon;
			pEndNode=pH_Horizon;

			pH_Horizon=pH_Horizon->pHorizon;
		}

		// No matching nodes
		if(pH_Horizon==pRoot) break;

		// Nodes matching
		if(pV_Horizon->nNumber==pH_Horizon->nNumber)
		{
			if(EliminateBranches(pV_Horizon,pH_Horizon))
			{
				pH_Horizon->pVertical=pNodeRecycle;
				pNodeRecycle=pH_Horizon;
				nMptreeNodeCount--;
			}
			else{
				pEndNode->pHorizon=pH_Horizon;
				pEndNode=pH_Horizon;
			}

			// Go to next nodes
			pV_Horizon=pV_Horizon->pHorizon;
			pH_Horizon=pH_Horizon->pHorizon;
		}

		while(pV_Horizon->nNumber>pH_Horizon->nNumber)
			pV_Horizon=pV_Horizon->pHorizon;

		// No matching nodes
		if(pV_Horizon==pRoot) break;

		// Nodes matching
		if(pV_Horizon->nNumber==pH_Horizon->nNumber)
		{
			if(EliminateBranches(pV_Horizon,pH_Horizon))
			{
				pH_Horizon->pVertical=pNodeRecycle;
				pNodeRecycle=pH_Horizon;
				nMptreeNodeCount--;
			}
			else{
				pEndNode->pHorizon=pH_Horizon;
				pEndNode=pH_Horizon;
			}

			// Go to next nodes
			pV_Horizon=pV_Horizon->pHorizon;
			pH_Horizon=pH_Horizon->pHorizon;
		}
	}

	// End horizontal link
	pEndNode->pHorizon=pH_Horizon;

	// Deal with the result
	if(pHeader->pHorizon==pRoot)
	{
		pHeader--;
		return true;
	}

	pH_Root->pVertical=pHeader->pHorizon;
	pHeader--;

	return false;
}

// Print out max-patterns
void PrintMaxpatterns()
{
	FPTREENODE *pM_Node,**arrpM_Stack;
	unsigned i,nS;

	// Initialization
	arrpM_Stack=new FPTREENODE *[nFPMaxlength+1];
	pM_Node=pM_Root;
	nS=0;
	while(1)
	{
		// Go to branch leaves
		if(pM_Node->nNumber)
		{
			do{
				arrpM_Stack[nS++]=pM_Node;
				pM_Node=pM_Node->pVertical;
			}while(pM_Node);

			// Print a max-pattern
//			for(i=1;i<nS;i++) fprintf(fileResult,"%u\t",arrNumberToItem[arrpM_Stack[i]->nNumber]);
			for(i=1;i<nS;i++) fprintf(fileResult,"%u\t",arrpM_Stack[i]->nNumber);
			fprintf(fileResult,":: %d\n",arrpM_Stack[nS-1]->fFrequency);
		}

		// Return to upper level
		nS--;
		if(!nS) break;
		pM_Node=arrpM_Stack[nS]->pHorizon;
	}

	// Free memory
	delete[]arrpM_Stack;
}

// Free allocated memory
void FreeMemory()
{
	MEMORYBLOCK *pTempMemory;
	FPTREENODE *pBlock;

	// Free allocated memory
    delete[]arrfItemInfo;
	delete[]arrNumberToItem;
	delete[]arrpFpHorizon;
	delete[]arrfFreq;

	// Free fptree nodes
	do
	{
		pTempMemory=pMemory;
		pMemory=pTempMemory->pNext;
		pBlock=pTempMemory->pMBlock;
		delete[]pBlock;
		delete pTempMemory;
	}while(pMemory!=0);
}

/*  Used variables in searching:
Variable		Type		Creation		Initialization	Deletion

arrfItemInfo	ITEMINFO[]	Initialize()	Initialize()	DeletFptree()
arrNumberToItem	ITEM_TYPE[]	 Sort()			Sort()			DeletFptree()
arrpFpHorizon	FPTREENODE*[] Sort()		Sort()			DeletFptree()
arrfFreq		FREQ_TYPE[]	  Sort()		Sort()			MiningMaxfp()
arrPattern		int[]		  MiningMaxfp()	MiningMaxfp()		MiningMaxfp()

*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本黄色一区二区| 亚洲第一成人在线| 老司机午夜精品99久久| 色狠狠av一区二区三区| 欧美国产成人在线| 国产黄色精品网站| 精品国产乱码久久久久久免费| 亚洲一区二区在线免费看| 成人激情综合网站| 久久综合资源网| 美女视频黄a大片欧美| 欧美另类videos死尸| 亚洲综合在线视频| 色狠狠色狠狠综合| 亚洲永久精品国产| 在线视频一区二区免费| 一区二区三区欧美视频| 69成人精品免费视频| 亚洲最大成人综合| 色吊一区二区三区| 亚洲国产日韩a在线播放性色| 日本道免费精品一区二区三区| 亚洲欧美视频在线观看| 色哟哟亚洲精品| 亚洲综合999| 欧美午夜精品电影| 亚洲777理论| 日韩欧美你懂的| 韩国三级在线一区| 国产日韩欧美一区二区三区乱码| 国产成人aaa| 亚洲色图欧洲色图| 欧洲一区二区av| 日韩av一区二区三区四区| 日韩欧美一区中文| 国产美女视频一区| 中文字幕国产精品一区二区| 色综合视频在线观看| 亚洲第一成年网| 欧美v国产在线一区二区三区| 国产精选一区二区三区| 中文字幕一区二区三区色视频 | 99re成人精品视频| 亚洲精品午夜久久久| 在线播放视频一区| 国产精品综合网| 亚洲精品日韩一| 日韩欧美成人激情| eeuss国产一区二区三区| 亚洲在线视频一区| 精品粉嫩超白一线天av| 99久久伊人精品| 日韩影视精彩在线| 国产午夜久久久久| 欧美色图第一页| 国模无码大尺度一区二区三区| 亚洲欧美另类久久久精品| 91精品国产手机| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 国产网红主播福利一区二区| 岛国精品在线播放| 午夜久久久久久久久| 久久久噜噜噜久噜久久综合| 99免费精品视频| 蜜桃一区二区三区在线| 国产精品成人免费在线| 91麻豆精品国产91久久久| 国产成人免费网站| 午夜精品久久久久影视| 国产偷国产偷精品高清尤物| 欧美喷水一区二区| 成人综合婷婷国产精品久久蜜臀 | 亚洲精品写真福利| 久久蜜桃av一区二区天堂| 欧洲精品一区二区三区在线观看| 国产成人一区二区精品非洲| 亚洲午夜电影在线观看| 中文字幕亚洲不卡| 精品入口麻豆88视频| 精品视频资源站| 99热精品一区二区| 国产成人av电影| 久久av资源网| 日韩精品一级二级| 亚洲一区自拍偷拍| 中文字幕一区二区三| 国产日韩欧美综合一区| 精品日韩欧美在线| 91精品国产综合久久精品app| 99re视频这里只有精品| 国产v综合v亚洲欧| 国产一区二区三区在线观看免费| 婷婷开心激情综合| 亚洲一区国产视频| 亚洲精品国产品国语在线app| 波多野结衣在线aⅴ中文字幕不卡| 亚洲精品大片www| 亚洲欧美一区二区在线观看| 国产欧美日韩卡一| 久久综合一区二区| 精品成人a区在线观看| 日韩欧美亚洲另类制服综合在线| 91精品国产一区二区| 欧美三级视频在线| 欧美午夜片在线观看| 欧美日韩中文字幕一区二区| 在线观看免费一区| 日本精品一区二区三区四区的功能| 风间由美一区二区三区在线观看| 国产精品 欧美精品| 国产精品一级黄| 国产成人在线影院| 成人午夜视频网站| 成人国产在线观看| 色欧美片视频在线观看| 色av综合在线| 欧美日韩精品系列| 9191久久久久久久久久久| 91精品在线观看入口| 欧美一区日韩一区| 日韩免费观看高清完整版| 精品国内片67194| 国产日韩欧美激情| 国产精品乱子久久久久| 一区在线观看免费| 亚洲自拍偷拍麻豆| 亚洲成av人片观看| 激情综合网最新| 成人激情午夜影院| 在线视频你懂得一区| 91精品国产91久久久久久一区二区 | 亚洲色图在线视频| 亚洲久本草在线中文字幕| 亚洲一区二区三区小说| 日韩成人dvd| 国产精品一区二区久激情瑜伽| 99久久久久免费精品国产| 色综合婷婷久久| 欧美男男青年gay1069videost| 日韩色在线观看| 国产日产亚洲精品系列| 亚洲图片你懂的| 日日摸夜夜添夜夜添国产精品| 久久99国产乱子伦精品免费| 国产69精品久久久久777| 在线亚洲+欧美+日本专区| 欧美一级生活片| 国产精品无人区| 亚瑟在线精品视频| 国产一级精品在线| 在线免费一区三区| 欧美成人综合网站| 亚洲精品日韩专区silk| 麻豆精品在线观看| 99re这里只有精品首页| 91精品国产综合久久久久久久久久 | 成人av在线一区二区三区| 欧美影院一区二区三区| 欧美变态凌虐bdsm| 亚洲图片另类小说| 激情成人午夜视频| 欧美日韩一区二区在线视频| 久久久久亚洲蜜桃| 午夜一区二区三区视频| 国产 日韩 欧美大片| 69p69国产精品| 亚洲女人的天堂| 国产精品一区不卡| 91精品久久久久久久91蜜桃| 国产精品黄色在线观看| 蜜臀精品一区二区三区在线观看 | 成人美女视频在线观看18| 91麻豆精品国产91久久久久久 | 色综合天天综合给合国产| 日韩免费视频线观看| 亚洲一区二区四区蜜桃| 国产一区二区精品久久99| 欧美私模裸体表演在线观看| 国产欧美精品一区二区三区四区 | 大胆亚洲人体视频| 日韩欧美激情在线| 亚洲一区二区欧美日韩| 成a人片亚洲日本久久| 精品国产麻豆免费人成网站| 亚洲超碰精品一区二区| 91麻豆免费视频| 欧美国产一区二区| 国产自产高清不卡| 欧美一区二区在线不卡| 亚洲激情在线播放| a美女胸又www黄视频久久| www欧美成人18+| 免费人成黄页网站在线一区二区| 欧美系列一区二区| 亚洲一区二区精品3399| 日本韩国视频一区二区| 亚洲美女少妇撒尿| 色综合久久综合中文综合网| 中文字幕一区二区三区精华液| 丁香激情综合国产|