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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? closedseqtree.cpp

?? 數(shù)據(jù)挖掘中的序列模式挖掘算法clospan的C++實(shí)現(xiàn)
?? CPP
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
}int TreeNodeCompare( TreeNode ** a, TreeNode ** b ){	if( (*(*a)).ItemIsIntra == (*(*b)).ItemIsIntra )		if( (*(*a)).Item == (*(*b)).Item )			return 0;		else if( (*(*a)).Item < (*(*b)).Item )			return -1;		else			return 1;	else if( (*(*a)).ItemIsIntra && !(*(*b)).ItemIsIntra )		return -1;	else		return 1;}TreeNode::TreeNode( int anItem, bool IsIntra, int Sup, TreeNode * aParent ){	Children = NULL;	Parent = aParent;	ItemsetNumber = 0;	Item = anItem;	ItemIsIntra = IsIntra;	Support = Sup;}inline TreeNode * TreeNode::FindChild( int anItem, bool Intra ){	TreeNode ** Res;	TreeNode * tmp = new TreeNode( anItem, Intra );	Res = (TreeNode **) bsearch( &tmp, (*Children).begin(), (*Children).size(), sizeof( TreeNode *), (int (*)(const void*, const void*))TreeNodeCompare );	delete tmp;	if( Res )		return (*Res);	else		return NULL;}inline TreeNode * TreeNode::FindChild( TreeNode * Child ){	TreeNode ** Res;	Res = (TreeNode **) bsearch( &Child, (*Children).begin(), (*Children).size(), sizeof( TreeNode *), (int (*)(const void*, const void*))TreeNodeCompare );	if( Res )		return (*Res);	else		return NULL;}inline void TreeNode::DelChild( TreeNode * Child ){	TreeNode ** Res;	if( Children==NULL )		return;	if( (*Children).size() == 1 )	{		Res = (*Children).begin();	} else {		Res = (TreeNode **) bsearch( &Child, (*Children).begin(), (*Children).size(), sizeof( TreeNode *), (int (*)(const void*, const void*))TreeNodeCompare );	}	if( Res )	{		(*Children).erase( (Res) );	}}TreeNode * TreeNode::AddChild( TreeNode * Child ) { 	TreeNode * Result = NULL;	if( Children == NULL )	{		Children = new NodeVector();		(*Children).push_back( Child );		Result = Child;		(*Child).Parent = this;		if( (*Child).ItemIsIntra )			(*Child).ItemsetNumber = ItemsetNumber;		else			(*Child).ItemsetNumber = ItemsetNumber + 1;	} else {		Result = FindChild( Child );		if( Result == NULL )		{			Result = Child;			(*Children).push_back( Child ); 			// To keep the children vector sorted.			inplace_merge( (*Children).begin(), (*Children).end()-1, (*Children).end(), TreeNodeLess );			(*Child).Parent = this;			if( (*Child).ItemIsIntra )				(*Child).ItemsetNumber = ItemsetNumber;			else				(*Child).ItemsetNumber = ItemsetNumber + 1;		} else {			if( (*Child).Support > (*Result).Support )				(*Result).Support = (*Child).Support;			delete Child;		}	}	return Result;}inline int TreeNode::NumOfChildren(){	if( Children==NULL )		return 0;	else		return (*Children).size();}inline int TreeNode::MaxChildSupport(){	int MaxChildSup = 0;  NodeVector::iterator Itrtr;	if( Children==NULL )		return 0;	for( Itrtr = (*Children).begin(); Itrtr != (*Children).end(); Itrtr++ )		if( (*(*Itrtr)).Support > MaxChildSup )			MaxChildSup = (*(*Itrtr)).Support;	return MaxChildSup;}bool TreeNode::LastItemOfSequence(){	if( Children==NULL )		return true;	if( MaxChildSupport() < Support )		return true;	return false;}void TreeNode::PrintRules( FILE * aFile, int * SeqBuf, int SeqLen, SequenceList * aSeqTree, SeqList * aSeqList, int NumOfItems ){	Sequence * aSeq;	int MaxChildSupport = 0;  NodeVector::iterator Itrtr;	SeqBuf[ SeqLen ] = Item;	if( Children != NULL )	{		for( Itrtr = (*Children).begin(); Itrtr != (*Children).end(); Itrtr++ )		{			if( !(*(*Itrtr)).ItemIsIntra )			{				SeqBuf[ SeqLen + 1 ] = -1;				(*(*Itrtr)).PrintRules( aFile, SeqBuf, SeqLen + 2, aSeqTree, aSeqList, NumOfItems + 1 );			} else {				(*(*Itrtr)).PrintRules( aFile, SeqBuf, SeqLen + 1, aSeqTree, aSeqList, NumOfItems + 1 );			}			if( (*(*Itrtr)).Support > MaxChildSupport )			{				MaxChildSupport = (*(*Itrtr)).Support;			} 		}		if( MaxChildSupport < Support )		{			aSeq = new Sequence( SeqBuf, SeqLen + 1, Support );			gnResSizeCount[NumOfItems]++;			if( aSeqList==NULL )			{				(*aSeq).Print( aFile );				delete aSeq;			} else {				(*aSeqList).push_back( aSeq );				// To keep the List vector sorted.				inplace_merge( (*aSeqList).begin(), (*aSeqList).end()-1, (*aSeqList).end(), SeqGreater );			}			(*aSeqTree).Size++;		}	} else {		aSeq = new Sequence( SeqBuf, SeqLen + 1, Support );		gnResSizeCount[NumOfItems]++;		if( aSeqList==NULL )		{			(*aSeq).Print( aFile );			delete aSeq;		} else {			(*aSeqList).push_back( aSeq );			// To keep the List vector sorted.			inplace_merge( (*aSeqList).begin(), (*aSeqList).end()-1, (*aSeqList).end(), SeqGreater );		}		(*aSeqTree).Size++;	}}void TreeNode::Print( char * PrefixString, FILE * aFile ){  NodeVector::iterator Itrtr;	if( ItemIsIntra )		fprintf( aFile, "%sNode = _%d   Support = %d   ItemsetNumber = %d\n", PrefixString, Item, Support, ItemsetNumber );	else		fprintf( aFile, "%sNode =  %d   Support = %d   ItemsetNumber = %d\n", PrefixString, Item, Support, ItemsetNumber );	if( Children != NULL && NumOfChildren() > 0 )	{		char tmpString[256] = "   ";		fprintf( aFile, "  %sChildren\n", PrefixString );		strncat( tmpString, PrefixString, 250 );		//strcat( tmpString, "  " );		for( Itrtr = (*Children).begin(); Itrtr != (*Children).end(); Itrtr++ )		{			//fprintf( aFile, "    " );			(*(*Itrtr)).Print( tmpString, aFile );		}	}	//fprintf( aFile, "\n" );}TreeNode::~TreeNode(){	NodeVector::iterator Itrtr;	if( Children )		for( Itrtr = (*Children).begin(); Itrtr != (*Children).end(); Itrtr++)			delete *Itrtr;}//************************//************************//************************//************************bool HdrTreeNodeLess( TreeNode * a, TreeNode * b ){	return a > b;}int HdrTreeNodeCompare( TreeNode ** a, TreeNode ** b ){	if( *a < *b )		return 1;	else if( *a > *b )		return -1;	else   		return 0;}SequenceList::SequenceList( int ItemsCount ){	PeakNumOfTreeNodes = 0;	NumOfTreeNodes = 0;	Root = new TreeNode();	IncNumOfTreeNodes();	NumOfItems = ItemsCount;	Header = new NodeVector[ NumOfItems ];	NumOfAdds = 0;	NumOfDels = 0;	NumOfAddIfClosed = 0;	NumIsClosedSubsetOfBranch = 0;	NumIsClosedSupersetOfBranch = 0;}inline void SequenceList::IncNumOfTreeNodes(){	NumOfTreeNodes++;	if( NumOfTreeNodes > PeakNumOfTreeNodes )		PeakNumOfTreeNodes = NumOfTreeNodes;}inline void SequenceList::DecNumOfTreeNodes(){	NumOfTreeNodes--;}// Returns the item in the last itemset of aSeq, with shortest header list.int SequenceList::LeastFreqInHeader( Sequence * aSeq ){	int * ItemPtr;	int Res = -1;	int Min = 10000000;	int HeaderSize;	for( ItemPtr=(*aSeq).StartPtr+(*aSeq).Len-1; *ItemPtr!=-1 && ItemPtr>=(*aSeq).StartPtr; ItemPtr-- )	{		HeaderSize = Header[*ItemPtr].size();		if( HeaderSize < Min )		{			Min = HeaderSize;			Res = *ItemPtr;		}		if( Min==0 ) break;	}	return Res;}// Returns true, if aSeq is a subset of the sequence in the tree with aNode as its last Item.bool SequenceList::IsClosedSubsetOfBranch( Sequence * aSeq, TreeNode * aNode ){	int * ItemPtr;	int * EndOfItemset;	int NumOfRemItemsets;	TreeNode * CurNode = aNode;	NumIsClosedSubsetOfBranch++;	NumOfRemItemsets = (*aSeq).NumOfItemSets();	if( (*CurNode).ItemsetNumber < NumOfRemItemsets || (*aSeq).Support > (*CurNode).Support )		return false;	ItemPtr = (*aSeq).StartPtr+(*aSeq).Len-1;	EndOfItemset = ItemPtr;	// For all itemsets in the sequence.	while( ItemPtr >= (*aSeq).StartPtr )	{		// For this itemset.		while( true )		{			if( (*CurNode).Item == *ItemPtr )			{				ItemPtr--;				if( ItemPtr < (*aSeq).StartPtr )					return true;				// Check previous itemset in the sequence.				if( *ItemPtr == -1 )				{					ItemPtr--;					break;				}			}			if( !(*CurNode).ItemIsIntra )			{				if( (*CurNode).ItemsetNumber <= NumOfRemItemsets )					return false;				ItemPtr = EndOfItemset;			}			CurNode = (*CurNode).Parent;		}		NumOfRemItemsets--;		//Move to the end of the previous itemset.		while( (*CurNode).ItemIsIntra && (*CurNode).Parent!=NULL )			CurNode = (*CurNode).Parent;		CurNode = (*CurNode).Parent;		EndOfItemset = ItemPtr;	}	return false;}// Returns true, if aSeq is a superset of the sequence in the tree with aNode as its last element.bool SequenceList::IsClosedSupersetOfBranch( Sequence * aSeq, TreeNode * aNode ){	int * ItemPtr;	TreeNode * EndOfItemset;	int NumOfRemItemsets;	TreeNode * CurNode = aNode;	NumIsClosedSupersetOfBranch++;	NumOfRemItemsets = (*aSeq).NumOfItemSets();	if( (*CurNode).ItemsetNumber > NumOfRemItemsets || (*CurNode).Support > (*aSeq).Support )		return false;	ItemPtr = (*aSeq).StartPtr+(*aSeq).Len-1;	EndOfItemset = aNode;	while( ItemPtr >= (*aSeq).StartPtr )	{		// For this itemset.		//while( true )		while( ItemPtr >= (*aSeq).StartPtr )		{			if( (*CurNode).Item == *ItemPtr )			{				//if( (*(*CurNode).Parent).ItemsetNumber == 0 )				if( (*(*CurNode).Parent).ItemsetNumber <= 0 )					return true;				// Check previous itemset in the sequence.				if( !(*CurNode).ItemIsIntra )				{					CurNode = (*CurNode).Parent;					break;				}				CurNode = (*CurNode).Parent;			}			if( *ItemPtr == -1 )			{				NumOfRemItemsets--;				if( (*CurNode).ItemsetNumber > NumOfRemItemsets )					return false;				CurNode = EndOfItemset;			}			ItemPtr--;		}		//Move to the end of the previous itemset.		while( *ItemPtr!=-1 && ItemPtr >= (*aSeq).StartPtr )			ItemPtr--;		ItemPtr--;		EndOfItemset = CurNode;	}	return false;}bool SequenceList::IsContained( Sequence * aSeq ){	int NumOfItemSets;	int anItem;  NodeVector::iterator Itrtr;	if( (*aSeq).Len == 0 )		return true;	// Just check for the item in the item list with shortest header list.	//anItem = LeastFreqInHeader( aSeq );	anItem = *((*aSeq).StartPtr+(*aSeq).Len-1); // Last Item of the sequence.	if( Header[anItem].size() == 0 )		return false; 	NumOfItemSets = (*aSeq).NumOfItemSets();	for( Itrtr = Header[anItem].begin(); Itrtr != Header[anItem].end(); Itrtr++ )	{		if( (*(*Itrtr)).ItemsetNumber < NumOfItemSets || (*(*Itrtr)).Support < (*aSeq).Support )			continue;				if( IsClosedSubsetOfBranch( aSeq, (*Itrtr) ) )			return true;	}	return false;}void SequenceList::RemoveFromHeaderList( TreeNode * aNode ){  NodeVector::iterator Itrtr;	Itrtr = FindInHeaderList( aNode ) ;	while( Itrtr!=NULL )	{		Header[(*aNode).Item].erase( Itrtr );		Itrtr = FindInHeaderList( aNode ) ;	}/*	for( Itrtr = Header[(*aNode).Item].begin(); Itrtr<Header[(*aNode).Item].end(); Itrtr++ )	{		if( (*Itrtr) == aNode )			Itrtr = Header[(*aNode).Item].erase( Itrtr );	}*/}void SequenceList::DeleteSequence( TreeNode * aNode ){	TreeNode * tmpNode;	TreeNode * tmpChildNode;	int aSup;	int NewSup;	aSup = (*aNode).Support;	tmpNode = aNode;	while( (*tmpNode).Support==aSup && (*tmpNode).Parent!=NULL && (*tmpNode).NumOfChildren() == 0 )	{		RemoveFromHeaderList( tmpNode );		tmpChildNode = tmpNode;		tmpNode = (*tmpNode).Parent;		(*tmpNode).DelChild( tmpChildNode );		delete tmpChildNode;		DecNumOfTreeNodes();	}	if( (*tmpNode).Support==aSup && (*tmpNode).Parent!=NULL )	{		NewSup = (*tmpNode).MaxChildSupport();		(*tmpNode).Support = NewSup;		tmpNode = (*tmpNode).Parent;	}	while( (*tmpNode).Support==aSup && (*tmpNode).Parent!=NULL )	{		if( (*tmpNode).Support > (*tmpNode).MaxChildSupport() )			(*tmpNode).Support = NewSup;		tmpNode = (*tmpNode).Parent;	}}void SequenceList::DeleteClosedSubsets( Sequence * aSeq ){

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美视频自拍偷拍| 欧日韩精品视频| 一区二区三区四区视频精品免费 | 亚洲人123区| 欧美三级一区二区| 久久精品久久99精品久久| 久久久一区二区三区| 在线看国产一区| 久久99精品一区二区三区三区| 国产精品欧美一级免费| 欧洲人成人精品| 国产一区二区三区黄视频| 亚洲欧美二区三区| 日韩精品综合一本久道在线视频| 高清不卡在线观看| 日韩国产一二三区| 国产精品三级电影| 精品三级av在线| 欧美性生活久久| 国产91精品露脸国语对白| 日本一不卡视频| 一区二区三区中文免费| 久久久久88色偷偷免费| 欧美体内she精高潮| 99精品偷自拍| 国产精品一区二区黑丝| 午夜精品在线看| 亚洲美女淫视频| 亚洲欧洲精品一区二区三区| 日韩欧美国产wwwww| 欧美日韩国产一级片| 99久久免费精品高清特色大片| 国产美女在线精品| 视频一区视频二区中文| 亚洲一区中文在线| 亚洲欧美另类久久久精品2019| 亚洲国产高清aⅴ视频| 欧美精品一区二区久久久| 99在线热播精品免费| 久久www免费人成看片高清| 亚洲三级在线观看| 欧美电影免费观看完整版 | 亚洲欧美激情插| 久久久综合激的五月天| 欧美成人精品1314www| 欧美日韩一区二区在线观看| 99视频热这里只有精品免费| 国产乱人伦偷精品视频不卡| 麻豆91在线播放| 奇米四色…亚洲| 美女脱光内衣内裤视频久久影院| 亚洲国产一区视频| 一区二区在线观看视频| 一区在线中文字幕| ...xxx性欧美| 国产精品久久夜| 亚洲天堂网中文字| 国产精品私房写真福利视频| 国产亚洲欧美日韩日本| 久久久精品tv| 日韩免费电影一区| 精品电影一区二区| 久久精品欧美一区二区三区不卡| 久久在线免费观看| 国产精品免费网站在线观看| 亚洲日本在线看| 亚洲第一狼人社区| 久久精品国产99国产精品| 国产一区999| 色爱区综合激月婷婷| 777奇米成人网| 久久精品日韩一区二区三区| 中文字幕一区二区日韩精品绯色| 亚洲欧美日韩久久精品| 亚洲国产精品欧美一二99| 美女免费视频一区二区| 国产成人免费视频一区| 91丝袜美女网| 欧美一级国产精品| 中文字幕不卡一区| 亚洲成人av免费| 国产乱人伦偷精品视频免下载 | 中文字幕一区二区三区不卡在线 | 91精品欧美综合在线观看最新| 久久人人爽人人爽| 一区二区在线观看不卡| 久88久久88久久久| www.欧美精品一二区| 日韩一区二区中文字幕| 中文字幕亚洲欧美在线不卡| 日韩成人dvd| 色婷婷久久99综合精品jk白丝| 7777精品伊人久久久大香线蕉 | 久久 天天综合| 欧美性xxxxxxxx| 久久九九99视频| 日精品一区二区| 91免费精品国自产拍在线不卡| 欧美mv日韩mv亚洲| 偷拍自拍另类欧美| 国产精品一区免费在线观看| 欧美日韩高清一区二区| 中文字幕综合网| 精品一区二区免费视频| 欧美视频中文一区二区三区在线观看| 精品国产区一区| 日韩精品电影一区亚洲| 99视频精品在线| 国产欧美一区视频| 麻豆91在线播放免费| 717成人午夜免费福利电影| 亚洲人成精品久久久久| 高清国产一区二区| 日本一二三不卡| 国产一区二区导航在线播放| 精品国产乱码久久久久久老虎| 日韩二区三区四区| 欧美剧情片在线观看| 亚洲成人免费看| 欧美高清精品3d| 五月天婷婷综合| 在线观看国产91| 亚洲一区二区三区激情| 欧美特级限制片免费在线观看| 亚洲精品菠萝久久久久久久| 一本色道久久综合亚洲aⅴ蜜桃| 国产精品久久久久久久久动漫 | 夜色激情一区二区| 欧美日韩情趣电影| 精品一区二区三区蜜桃| 久久久亚洲精品石原莉奈| 国产成人在线视频免费播放| 国产精品日产欧美久久久久| www.日韩在线| 天堂在线亚洲视频| 精品毛片乱码1区2区3区| 性欧美疯狂xxxxbbbb| 9191成人精品久久| 久久99日本精品| 国产精品成人一区二区三区夜夜夜| 一本久久a久久精品亚洲| 午夜精品久久久久久久99樱桃| 久久亚洲精品国产精品紫薇| 成人激情校园春色| 日韩av网站在线观看| 精品国内二区三区| 91蝌蚪porny| 久草精品在线观看| 亚洲综合免费观看高清完整版| 精品国产三级a在线观看| 色偷偷成人一区二区三区91| 蜜臀av性久久久久蜜臀aⅴ流畅| 日本一区二区三区久久久久久久久不 | 成人免费视频视频在线观看免费| 一区二区三区四区在线播放 | 精品一区二区三区在线视频| 一区二区三区日韩精品| 久久久www免费人成精品| 这里只有精品免费| 91免费观看国产| 激情深爱一区二区| 亚洲成在线观看| 国产精品国产精品国产专区不片| 精品国产乱码久久久久久图片| 91精品国产综合久久小美女| 色婷婷国产精品综合在线观看| 波多野结衣中文字幕一区 | 国产精品久线观看视频| 国产日韩欧美a| 国产精品色眯眯| 国产精品对白交换视频| 成人免费小视频| 亚洲精品成人少妇| 午夜影院久久久| 日韩国产精品91| 久久狠狠亚洲综合| 国产精品主播直播| 99精品视频一区| 色88888久久久久久影院野外| 一本到不卡精品视频在线观看| 欧洲精品在线观看| 欧美日韩不卡一区| 精品1区2区在线观看| 中文字幕不卡在线播放| 亚洲色欲色欲www| 亚洲成a天堂v人片| 日本欧美一区二区在线观看| 国内久久婷婷综合| 91丨九色丨蝌蚪富婆spa| 欧美视频一区二区三区四区| 欧美一区二区三区在线电影| 国产视频一区二区在线| 国产精品国产自产拍高清av| 亚洲小说欧美激情另类| 激情五月婷婷综合网| 91丨porny丨蝌蚪视频| 日韩欧美一级片| 亚洲欧美日韩国产另类专区| 蜜桃视频在线一区| 99综合电影在线视频|