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

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

?? maxseqtree.cpp

?? 數據挖掘中的序列模式挖掘算法clospan的C++實現
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
#if defined( _USE_STRING_ELEMINATION )bool SeqTree::IsContained( const struct PROJ_DB *proj_db, int * aSeqPtr ){	Sequence * aSeq;	SeqWrap * aSeqWrap;	aSeqWrap = new SeqWrap( aSeqPtr );	if( !(*aSeqWrap).IsEmpty() )	{		aSeq = new Sequence( proj_db, aSeqPtr );		return IsContained( aSeq );	} else {		return false;	}}#endif // defined( _USE_STRING_ELEMINATION )bool SeqTree::IsContained( Sequence * aSeq ){	int anItem;	ItemSet * LastItemSet;  NodeVector::iterator Itrtr;  //NodeList::iterator Itrtr;	if( (*aSeq).NumOfElements() == 0 ) return true;	(*aSeq).MoveLast();	LastItemSet = (*aSeq).Current();	// Just check for the item in the item list with shortest header list.	anItem = LeastFreqInHeader(LastItemSet);	if( Header[anItem].size() == 0 ) return false; 	for( Itrtr = Header[anItem].begin(); Itrtr != Header[anItem].end(); Itrtr++)	{		// Header list is sorted based on the level, 		// so stop as soon as level is less than # elements.		if( (*(*Itrtr)).Level < (*aSeq).NumOfElements() ) // 123			break; // 123		if( IsSubsetOfBranch( aSeq, (*Itrtr) ) )			return true;	}	return false;}// If aSeq is a superset of the sequence in the tree with aNode as its last element.bool SeqTree::IsSupersetOfBranch( Sequence * aSeq, TreeNode * aNode ){	int NumOfRemElmnts;	ItemSet * anItemSet;	TreeNode * CurNode;	NumIsMaxSubsetOf++;	if( (*aNode).NumOfChildren() > 0 || (*aNode).Level > (*aSeq).NumOfElements() )		return false;							(*aSeq).MoveLast();	anItemSet = (*aSeq).Current();	CurNode = aNode;	NumOfRemElmnts = (*aSeq).NumOfElements();	if( (*CurNode).Level > NumOfRemElmnts )		return false;		while( true )	{		if( (*CurNode).Level == 0 )			return false;		if( (*(*CurNode).Item).IsSubsetOf( anItemSet ) )		{			CurNode = (*CurNode).Parent;			(*aSeq).MovePrev();			anItemSet = (*aSeq).Current();			NumOfRemElmnts--;			if( (*CurNode).Level == 0 )				return true;		} else {			(*aSeq).MovePrev();			anItemSet = (*aSeq).Current();			NumOfRemElmnts--;			if( (*CurNode).Level > NumOfRemElmnts )				return false;		}	}}void SeqTree::PrintHeaderList( int anItem ){	printf(" ======= Size of the Header list for item %d =%d \n", anItem, Header[anItem].size() );  NodeVector::iterator myIt;  NodeVector::iterator BIt;  NodeVector::iterator EIt;  //NodeList::iterator myIt;  //NodeList::iterator BIt;  //NodeList::iterator EIt;	BIt = Header[anItem].begin();	EIt = Header[anItem].end();	EIt--;	//printf(" Head = " );	//(*(*(*BIt)).Item).Print();	//printf("\n End = " );	//(*(*(*EIt)).Item).Print();	//printf("\n" );	for( myIt = Header[anItem].begin(); myIt != Header[anItem].end(); myIt++)	{		try 		{			(*(*(*myIt)).Item).Print();			printf( "%d %d", (*(*myIt)).Level, (*myIt) ); 		}		catch(...) 		{			printf("*Err*" );		}	}	printf("\n =================== End\n" );}void SeqTree::DeleteSubsets( Sequence * aSeq ){	int anItem;	ItemSet * anItemSet;  ElementVector::iterator ElementItrtr;  NodeVector::iterator Itrtr;  //NodeList::iterator Itrtr;  NodeVector::iterator tmpItrtr;  //NodeList::iterator tmpItrtr;	// For each element, anItemSet, in aSeq.	for( ElementItrtr = (*aSeq).Elements.begin(); ElementItrtr != (*aSeq).Elements.end(); ElementItrtr++)	{		anItemSet = (*ElementItrtr);		// For each item, anItem, in anItemSet.		for( int i=0; i<(*anItemSet).NumOfItems(); i++ )		{			anItem = (*anItemSet).Items[i];			if( Header[anItem].size() > 0 )			{				Itrtr = Header[anItem].end() - 1;				while( Itrtr != Header[anItem].begin() - 1 )				{					try 					{						if( (*(*Itrtr)).Level > (*aSeq).NumOfElements() ) break; //123												if( IsSupersetOfBranch( aSeq, (*Itrtr) ) )						{							tmpItrtr = Itrtr;							tmpItrtr--;							NumOfDels++;							DeleteSequence( (*Itrtr) );							Itrtr = tmpItrtr;						} else 							Itrtr--;					} catch(...)	{						Itrtr--;						printf( " Error in Delete Subsets in SeqTree.\n" );					}				}			}		}	}}int SeqTree::AddSeq( Sequence * aSeq ){	TreeNode * tmp;	TreeNode * Current;	ItemSet * anItemSet;	bool * Duplicated;	int anItem;	int CurrentLevel;	//printf("==============>");	//(*aSeq).Print();	NumOfAddIfClosed++;	// aSeq was not added.	if( IsContained( aSeq ) ) return 1;	DeleteSubsets( aSeq );	Current = Root;	(*Current).Sup = (*aSeq).Sup;	Duplicated = (bool *)calloc( NumOfItems, sizeof(bool) );	(*aSeq).MoveFirst();	CurrentLevel = 1;	while( !(*aSeq).IsLast() )	{		anItemSet = (*aSeq).Current();		tmp = (*Current).FindChild( anItemSet );		if( !tmp )		{ // Add a new node to tree			tmp = new TreeNode( anItemSet );			(*tmp).Parent = Current;			(*tmp).Level = CurrentLevel;			(*Current).AddChild( tmp );		}		Current = tmp;		(*Current).Sup = (*aSeq).Sup;		(*aSeq).MoveNext();		CurrentLevel++;	}	(*Current).Sup = (*aSeq).Sup;	// Add the last instance of each item in the sequence to the header list.	while( Current != Root )	{		anItemSet = (*Current).Item;		for( int i=0; i<(*anItemSet).NumOfItems(); i++ )		{			anItem = (*anItemSet).Items[i];			if( !Duplicated[ anItem ] )			{				Header[anItem].push_back( Current );				// To keep the Header lists sorted.				inplace_merge( Header[anItem].begin(), Header[anItem].end()-1, Header[anItem].end(), TreeNodeLevelLess ); //123			}			Duplicated[ anItem ] = true;		}		Current = (*Current).Parent;	}	// aSeq was added.	NumOfAdds++;	return 0;}void SeqTree::Print( FILE * aFile ){  NodeVector::iterator Itrtr;  //NodeList::iterator Itrtr;	if( Root )		(*Root).Print( aFile );	fprintf( aFile, "\n Header Table:\n" );	for( int i=0; i<NumOfItems; i++ )	{		fprintf( aFile, "  List for %d (Len=%d) => ", i, Header[i].size() );		for( Itrtr = Header[i].begin(); Itrtr != Header[i].end(); Itrtr++)		{			fprintf( aFile, "  " );			if( (*(*Itrtr)).Item ) (*(*(*Itrtr)).Item).Print();		}		fprintf( aFile, " \n" );	}}void SeqTree::InternalPrintRules( FILE * aFile, TreeNode * InNode, Sequence * aSeq, SeqList * SortedSeqList ){	TreeNode * aNode;	TreeNode * aChild;	if( InNode )		aNode = InNode;	else {		aNode = Root;		NumOfSeqs = 0;	}	if( !aSeq )		aSeq = new Sequence();	if( !aNode ) return;	if( (*aNode).NumOfChildren() == 0 )	{		(*aSeq).Sup = (*aNode).Sup;				if( SortedSeqList == NULL )		{			(*aSeq).Print( aFile );		} else {			(*SortedSeqList).push_back( new Sequence( aSeq ) );			// To keep the List vector sorted.			inplace_merge( (*SortedSeqList).begin(), (*SortedSeqList).end()-1, (*SortedSeqList).end(), SeqGreater );			//(*(*(*SortedSeqList).begin())).Print();		}				NumOfSeqs++;	}	//fprintf( aFile, "\n Rules:\n" );	(*aNode).MoveFirst();	while( !(*aNode).IsLast() )	{		aChild = (*aNode).Current();		//(*(*aChild).Item).Print( aFile );		if( aChild )		{			(*aSeq).Add( (*aChild).Item );			InternalPrintRules( aFile, aChild, aSeq, SortedSeqList );		}		(*aSeq).Del();		(*aNode).MoveNext(); 		//if( !(*aNode).IsLast() )			//fprintf( aFile, " Support = %d\n", (*aNode).Sup );	}	if( (*aSeq).NumOfElements() == 0 )	{		//fprintf( aFile, " Support = %d\n", (*aNode).Sup );		delete aSeq;	}}void SeqTree::PrintRules( FILE * aFile, TreeNode * InNode, Sequence * aSeq ){		SeqList * SortedSeqList = NULL;	#if defined( _SORT_RESULTS )		SeqList::iterator ListItrtr;		SortedSeqList = new SeqList;	#endif	InternalPrintRules( aFile, InNode, aSeq, SortedSeqList );#if defined( _SORT_RESULTS )	fprintf( aFile, "\n" );	for( ListItrtr=(*SortedSeqList).begin(); ListItrtr<(*SortedSeqList).end(); ListItrtr++ )	{		(*(*ListItrtr)).Print( aFile );	}	delete SortedSeqList;#endif	fprintf( aFile, "\n" );	fprintf( aFile, "# of elements added %d\n", NumOfAdds );	fprintf( aFile, "# of elements deleteded %d\n", NumOfDels );	fprintf( aFile, "# of times AddIfMaxSeq called %d\n", NumOfAddIfClosed );	fprintf( aFile, "# of times IsMaxSubsetOf called %d\n", NumIsMaxSubsetOf );	fprintf( aFile, "# of elements in the list %d\n", NumOfSeqs );}SeqTree::~SeqTree(){	delete[] Header;	delete Root;}//************************//************************//************************//************************TreeNode::TreeNode( ItemSet * anItemSet, int Support ){	Item = anItemSet;	Sup = Support;	Parent = NULL;	Level = 0;}bool TreeNodeLess( TreeNode * a, TreeNode * b ){	return (*(*a).Item).IsLessThan( (*b).Item ) ;}void TreeNode::AddChild( TreeNode * Child ) { 	Children.push_back(Child); 	// To keep the children vector sorted.	inplace_merge( Children.begin(), Children.end()-1, Children.end(), TreeNodeLess );}int TreeNodeCompare( TreeNode ** a, TreeNode ** b ){	return (*(*(*a)).Item).Compare( (*(*b)).Item );}TreeNode * TreeNode::FindChild( ItemSet * anItem ){	TreeNode ** Res;	TreeNode * tmp = new TreeNode(anItem);	Res = (TreeNode **) bsearch( &tmp, Children.begin(), Children.size(), sizeof( TreeNode *), (int (*)(const void*, const void*))TreeNodeCompare );	if( Res )		return (*Res);	return NULL;}void TreeNode::DelChild( TreeNode * Child ){	TreeNode ** Res;	if( NumOfChildren() == 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) );		//return (*Res);	}}void TreeNode::Print( FILE * aFile ){  NodeVector::iterator Itrtr;	fprintf( aFile, "  Node = " );	if( Item ) (*Item).Print();	fprintf( aFile, "  Level=%d ", Level );	fprintf( aFile, " Suport = %d ) ", Sup );	fprintf( aFile, "   Children " );	for( Itrtr = Children.begin(); Itrtr != Children.end(); Itrtr++)	{		if (Itrtr != Children.end()-1 )		{			if( (*(*Itrtr)).Item ) (*((*(*Itrtr)).Item)).Print();			fprintf( aFile, " ," );		} else {			if( (*(*Itrtr)).Item ) (*((*(*Itrtr)).Item)).Print();		}	}	fprintf( aFile, "\n" );	for( Itrtr = Children.begin(); Itrtr != Children.end(); Itrtr++)	{		//fprintf( aFile, "    " );		(*(*Itrtr)).Print( aFile );	}	//fprintf( aFile, "\n" );}TreeNode::~TreeNode(){  NodeVector::iterator Itrtr;	if( Item ) 	{		delete Item;		Item = NULL;	}	for( Itrtr = Children.begin(); Itrtr != Children.end(); Itrtr++)		delete *Itrtr;}//************************//************************//************************//************************#else //if defined( _USE_MAX_TREE )//************************//************************SeqTree::SeqTree( int dummy ){	NumOfAdds = 0;	NumOfDels = 0;	NumOfAddIfMax = 0;	NumIsMaxSubsetOf = 0;}inline void SeqTree::Add( Sequence * aSeq ){	List.insert( List.end(), aSeq );	NumOfAdds++;}inline SeqList::iterator SeqTree::Del( SeqList::iterator anItr ){	NumOfDels++;	return List.erase( anItr );}// Tries to add aSeq to the list if non of the list elements// is a closed superset of aSeq.// Sequences in the list that are Max subset of aSeq// will be deleted from the list.// Returns true if aSeq is added.bool SeqTree::AddSeq( Sequence * aSeq ){	SeqList::iterator Itrtr;	bool IsSuper = false;	NumOfAddIfMax++;	for( Itrtr = List.begin(); Itrtr != List.end(); )	{		if( !IsSuper )		{			NumIsMaxSubsetOf++;			if( (*aSeq).IsMaxSubsetOf( (*Itrtr) ) )				return false;		}		NumIsMaxSubsetOf++;		if( (*(*Itrtr)).IsMaxSubsetOf( aSeq ) )		{			delete (*Itrtr) ;			IsSuper = true;			Itrtr = Del( Itrtr );		} else			Itrtr++;	}	Add( aSeq );	return true;}bool SeqTree::IsContained( const struct PROJ_DB *proj_db, int * aSeqPtr ){	bool temp;	Sequence * aSeq;	aSeq = new Sequence( proj_db, aSeqPtr );	temp = IsContained( aSeq );	//(*aSeq).Print();	//if( temp )	//	printf( "     Is contained in the resultset.\n" );	//else	//	printf( "     Is NOT contained in the resultset.\n" );	return temp;}bool SeqTree::IsContained( Sequence * aSeq ){	SeqList::iterator Itrtr;	for( Itrtr = List.begin(); Itrtr != List.end(); )	{		NumIsMaxSubsetOf++;		if( (*aSeq).IsMaxSubsetOf( (*Itrtr) ) )			return true;	}	return false;}void SeqTree::PrintRules( FILE *aFile ){	SeqList::iterator Itrtr;#if defined( _SORT_RESULTS )  SeqList::iterator ListItrtr;	SeqList * SortedSeqList = NULL;	SortedSeqList = new SeqList;#endif	fprintf( aFile, "\n" );	for( Itrtr = List.begin(); Itrtr != List.end(); Itrtr++)	{		#if defined( _SORT_RESULTS )			(*SortedSeqList).push_back( (*Itrtr) );			// To keep the List vector sorted.			inplace_merge( (*SortedSeqList).begin(), (*SortedSeqList).end()-1, (*SortedSeqList).end(), SeqGreater );		#else			(*(*Itrtr)).Print( aFile );		#endif	}#if defined( _SORT_RESULTS )	fprintf( aFile, "\n" );	for( ListItrtr=(*SortedSeqList).begin(); ListItrtr<(*SortedSeqList).end(); ListItrtr++ )	{		(*(*ListItrtr)).Print( aFile );	}	delete SortedSeqList;#endif	fprintf( aFile, "\n" );	fprintf( aFile, "# of elements added %d\n", NumOfAdds );	fprintf( aFile, "# of elements deleteded %d\n", NumOfDels );	fprintf( aFile, "# of times AddIfMaxSeq called %d\n", NumOfAddIfMax );	fprintf( aFile, "# of times IsMaxSubsetOf called %d\n", NumIsMaxSubsetOf );	fprintf( aFile, "# of elements in the list %d\n", List.size() );}SeqTree::~SeqTree(){	SeqList::iterator Itrtr;	for( Itrtr = List.begin(); Itrtr != List.end(); Itrtr++)		delete *Itrtr;}//************************//************************#endif // defined( _USE_MAX_TREE )//************************//************************#endif // defined( _FIND_MAX_SEQS )

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一级日本不卡的影视| 亚洲视频1区2区| 99久久精品免费看| 日本中文字幕一区二区视频| 欧美激情资源网| 欧美一区二区三区成人| 成人性生交大片免费看在线播放 | 日韩高清在线不卡| 国产午夜精品一区二区三区视频 | 亚洲第一福利视频在线| 欧美激情一区二区三区不卡| 91精品欧美一区二区三区综合在 | 日韩一区中文字幕| 欧美精品一区二区三区四区| 日本韩国精品一区二区在线观看| 精品一区二区在线免费观看| 亚洲高清免费观看高清完整版在线观看 | 日韩网站在线看片你懂的| 99免费精品在线| 国产精品亚洲一区二区三区妖精 | 欧美三级一区二区| 成人网页在线观看| 国产专区欧美精品| 日本 国产 欧美色综合| 天天影视网天天综合色在线播放| 亚洲视频一区二区在线| 中文字幕av资源一区| 精品盗摄一区二区三区| 91精品国产91久久久久久一区二区| 在线观看国产日韩| 91首页免费视频| www.性欧美| 成人免费看视频| 成人亚洲一区二区一| 国产麻豆精品theporn| 久久福利视频一区二区| 免费成人在线网站| 日韩高清在线不卡| 美女一区二区三区| 久久爱另类一区二区小说| 久久99国产精品久久99| 国内偷窥港台综合视频在线播放| 蜜臀久久久99精品久久久久久| 午夜欧美电影在线观看| 亚洲一区二区三区四区在线免费观看 | 国产日韩精品一区二区浪潮av| 欧美变态tickling挠脚心| 91精品国产欧美一区二区18 | 欧美日韩黄色影视| 欧美三区在线观看| 欧美一级日韩免费不卡| 精品免费视频.| 国产农村妇女毛片精品久久麻豆 | 日韩avvvv在线播放| 美女在线观看视频一区二区| 韩日av一区二区| 国产精品99久久久久久似苏梦涵 | 国产在线视视频有精品| 国产精一品亚洲二区在线视频| 成人精品鲁一区一区二区| 成人禁用看黄a在线| 色噜噜狠狠一区二区三区果冻| 91久久精品午夜一区二区| 欧美另类一区二区三区| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | www.av亚洲| 在线视频欧美精品| 欧美一二三区在线观看| 久久亚洲综合色一区二区三区 | 青青草97国产精品免费观看| 精品综合免费视频观看| 懂色av中文字幕一区二区三区| 在线日韩一区二区| 日韩一区二区免费电影| 久久久九九九九| 一区二区三区.www| 久久超碰97人人做人人爱| 成人av电影在线播放| 欧美性感一区二区三区| 精品福利一二区| 亚洲天堂2016| 捆绑调教一区二区三区| 国产mv日韩mv欧美| 精品视频全国免费看| 久久这里只有精品首页| 亚洲色图一区二区| 久久精品国产精品青草| 99精品热视频| 精品国免费一区二区三区| 中文字幕在线观看一区| 久久精品国产亚洲一区二区三区| 成人小视频在线| 91精品国产乱| 亚洲精品视频一区二区| 精品一区二区三区日韩| 91亚洲永久精品| 久久亚洲一区二区三区四区| 亚洲精品视频在线| 国产精品123区| 91精品国产色综合久久ai换脸| 国产精品激情偷乱一区二区∴| 婷婷丁香久久五月婷婷| av亚洲精华国产精华| 欧美va亚洲va国产综合| 亚洲成av人片观看| 成人激情av网| 久久久久久日产精品| 视频一区中文字幕| 色噜噜夜夜夜综合网| 国产三级精品视频| 蜜臀av性久久久久蜜臀aⅴ流畅 | 亚洲小说欧美激情另类| 国产成人精品免费| 欧美va亚洲va香蕉在线| 日韩一区精品视频| 91国偷自产一区二区开放时间| 欧美经典三级视频一区二区三区| 久久精工是国产品牌吗| 67194成人在线观看| 一区二区三区**美女毛片| 99久久久久久| 国产精品视频一二三区| 国产精品一线二线三线精华| 欧美一级日韩一级| 日本成人在线电影网| 欧美亚洲一区三区| 亚洲午夜久久久久久久久电影网 | 不卡一区二区三区四区| 国产亚洲欧美日韩俺去了| 狠狠色狠狠色综合日日91app| 日韩欧美卡一卡二| 美女视频黄 久久| 欧美一区二区视频在线观看2020| 亚洲人成电影网站色mp4| 不卡av电影在线播放| 国产日产欧产精品推荐色 | 色妹子一区二区| 国产精品电影一区二区三区| 成人性色生活片免费看爆迷你毛片| 久久综合国产精品| 激情综合网最新| 久久嫩草精品久久久久| 国产精品一区二区久激情瑜伽| 久久蜜桃av一区二区天堂| 国产高清精品网站| 国产精品人人做人人爽人人添| 岛国一区二区在线观看| 欧美国产成人精品| 99久久婷婷国产综合精品| 亚洲激情成人在线| 精品视频1区2区| 免费三级欧美电影| 欧美哺乳videos| 成人精品免费看| 一区二区国产视频| 在线综合+亚洲+欧美中文字幕| 蜜臀91精品一区二区三区| 久久亚洲一区二区三区四区| 成人久久18免费网站麻豆| 亚洲日穴在线视频| 欧美乱妇一区二区三区不卡视频| 蜜臀av一级做a爰片久久| 国产校园另类小说区| 色综合一区二区| 天天免费综合色| 久久综合九色综合久久久精品综合| 丁香另类激情小说| 亚洲一区免费视频| 精品国产髙清在线看国产毛片| 国产麻豆成人精品| 亚洲女同ⅹxx女同tv| 日韩一区二区三区在线观看| 国产一区二区调教| 亚洲精品亚洲人成人网在线播放| 在线不卡免费欧美| 丁香天五香天堂综合| 亚洲午夜三级在线| 久久影视一区二区| 欧美中文字幕一区二区三区| 久久99久久久久久久久久久| 一区在线观看免费| 日韩欧美电影一二三| 99精品国产视频| 免费高清在线视频一区·| 国产精品久久久久久久久久久免费看 | 欧美日韩在线播放一区| 国产精品一区免费视频| 亚洲一区二区三区影院| 国产日韩欧美一区二区三区综合| 欧美日韩一区国产| 国产成人在线观看免费网站| 亚洲成人免费电影| 国产精品日产欧美久久久久| 日韩丝袜情趣美女图片| 日本二三区不卡| 国产一区二区中文字幕| 亚洲va在线va天堂| 国产精品美女久久久久久久网站| 欧美一区二区私人影院日本| 色婷婷综合视频在线观看|