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

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

?? maxseqtree.cpp

?? 數據挖掘中的序列模式挖掘算法clospan的C++實現
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
#include "../Global.h"#include "../ProjDB.h"#include "SeqTree.h"#if defined( _FIND_MAX_SEQS )// Assumes itemsets have the same size.inline bool ItemSetGreater( ItemSet * a, ItemSet * b ){	if( (*a).NumOfItems() > (*b).NumOfItems() )		return true;	else if( (*a).NumOfItems() < (*b).NumOfItems() )		return false;	for( int i=0; i<(*a).NumOfItems(); i++ )	{		if( (*a).Items[i] > (*b).Items[i] )			return true;		if( (*a).Items[i] < (*b).Items[i] )			return false;	}	return false;}inline bool SeqGreater( Sequence * a, Sequence * b ){	ElementVector::iterator aItrtr;	ElementVector::iterator bItrtr;	if( (*a).Sup > (*b).Sup )		return true;	else if( (*a).Sup < (*b).Sup )		return false;	else if( (*a).Elements.size() > (*b).Elements.size() )		return true;	else if( (*a).Elements.size() < (*b).Elements.size() )		return false;	bItrtr = (*b).Elements.begin();	for( aItrtr = (*a).Elements.begin(); aItrtr != (*a).Elements.end(); aItrtr++)	{		if( ItemSetGreater( *aItrtr, *bItrtr ) )			return true;		if( ItemSetGreater( *bItrtr, *aItrtr ) )			return false;		bItrtr++;	}	return false;}//************************//************************ItemSet::ItemSet( int NumItems, int * Itms ){	int i;	Count = NumItems;	Items = new int[Count];	if( Itms )		for( i=0; i<Count; i++ )		{			Items[i]=Itms[i];		}}ItemSet::ItemSet( ItemSet * anItemSet ){	int i;	Count = (*anItemSet).NumOfItems();	Items = new int[Count];	if( (*anItemSet).Items )		for( i=0; i<Count; i++ )		{			Items[i]=(*anItemSet).Items[i];		}}inline bool ItemSet::IsSubsetOf( ItemSet * anItemSet ){	int j;	int MyCnt;	int OtherCnt;	MyCnt = NumOfItems();	OtherCnt = (*anItemSet).NumOfItems();	if( MyCnt > OtherCnt )		return false;	j = 0;	for( int i=0; i<MyCnt; i++ )	{		while( Items[i] != (*anItemSet).Items[j] )		{			j++;			if( OtherCnt-j < MyCnt-i ) 				return false;		}	}	return true;}inline bool ItemSet::IsLessThan( ItemSet * anItemSet ){	int MyCnt;	int OtherCnt;	MyCnt = NumOfItems();	OtherCnt = (*anItemSet).NumOfItems();	if( MyCnt < OtherCnt )		return true;	if( MyCnt > OtherCnt )		return false;	// MyCnt == OtherCnt	for( int i=0; i<MyCnt; i++ )	{		if( Items[i] < (*anItemSet).Items[i] )			return true;		if( Items[i] > (*anItemSet).Items[i] )			return false;	}	return true;}inline int ItemSet::Compare( ItemSet * anItemSet ){	int MyCnt;	int OtherCnt;	MyCnt = NumOfItems();	OtherCnt = (*anItemSet).NumOfItems();	if( MyCnt < OtherCnt )		return -1;	if( MyCnt > OtherCnt )		return +1;	// MyCnt == OtherCnt	for( int i=0; i<MyCnt; i++ )	{		if( Items[i] < (*anItemSet).Items[i] )			return -1;		if( Items[i] > (*anItemSet).Items[i] )			return +1;	}	return 0;}void ItemSet::Print1( FILE *aFile ){	int i;	fprintf( aFile, " (" );	for( i=0; i<Count; i++ )	{		fprintf( aFile, " %d ", Items[i] );	}	fprintf( aFile, ") " );}void ItemSet::Print( FILE *aFile ){	int i;	fprintf( aFile, " (" ); 	for( i=0; i<Count; i++ ) 	{		fprintf( aFile, " %d ", Items[i] );	}	fprintf( aFile, ") " );}void ItemSet::Add ( int Item ){	int i;	int * tmp;	tmp = new int[Count+1];	for( i=0; i<Count; i++ )	{		tmp[i] = Items[i];	}	tmp[Count] = Item;	delete[] Items;	Items = tmp;	Count++;}ItemSet::~ItemSet(){	delete[] Items;}//************************//************************//************************//************************Sequence::Sequence(){	Sup = 0;}Sequence::Sequence( Sequence * aSeq ){  ElementVector::iterator Itrtr;	Sup = (*aSeq).Sup;	for( Itrtr = (*aSeq).Elements.begin(); Itrtr != (*aSeq).Elements.end(); Itrtr++)		Add( new ItemSet( (*Itrtr) ) );}Sequence::Sequence( int * Ptr, int Support ){	ItemSet * anItemSet;	int Start;	Sup = Support;	Start = 0;  int * dataset = Ptr;	int * StartPtr = Ptr;	int i = 0;  for (; *dataset!=-2; dataset++)	{		if( *dataset == -1 )		{			anItemSet = new ItemSet( i-Start, StartPtr );			StartPtr = dataset + 1;			Start = i+1;			Add( anItemSet );		}		i++;	}	//Print();	//printf( "\n" );}Sequence::Sequence( int * Pat, int PatLen, int Support ){	ItemSet * anItemSet;	int Start;	Sup = Support;	Start = 0;	if( PatLen > 1 )	{		for( int i=0; i<PatLen; i++)		{			if( *(Pat + i) == -1 )			{				anItemSet = new ItemSet( i-Start, Pat+Start );				Start = i+1;				Add( anItemSet );			}		}		anItemSet = new ItemSet( i-Start, Pat+Start );		Add( anItemSet );	} else {		int tmp[1];		tmp[0] = *Pat;		anItemSet = new ItemSet( 1, tmp );		Add( anItemSet );	}}Sequence::Sequence( const struct PROJ_DB *proj_db, int Support ){	ItemSet * anItemSet;	int Start;	Sup = Support;	Start = 0;	if( proj_db[0].m_nPatLen > 1 )	{		for( int i=0; i<proj_db[0].m_nPatLen; i++)		{			if( proj_db[0].m_pnPat[i] == -1 )			{				anItemSet = new ItemSet( i-Start, &proj_db[0].m_pnPat[Start] );				Start = i+1;				Add( anItemSet );			}		}		anItemSet = new ItemSet( i-Start, &proj_db[0].m_pnPat[Start] );		Add( anItemSet );	} else {		int tmp[1];		tmp[0] = int( proj_db[0].m_pnPat );		anItemSet = new ItemSet( 1, tmp );		Add( anItemSet );	}//	Print();//	printf( "\n" );}Sequence::Sequence( const struct PROJ_DB *proj_db, int * aSeqPtr ) //: Sequence( proj_db, 0 ){#if defined( _PERFORM_COMMON_PREFIX_CHECKING )	int * aPtr;	int i;	SeqWrap * aSeq;	if( (*proj_db).m_nPatLen > 1 )	{		for( int j=0; j<(*proj_db).m_nPatLen; j++ )			buf_idx[j] = (*proj_db).m_pnPat[j];	} else		buf_idx[0] = int( (*proj_db).m_pnPat );	i = (*proj_db).m_nPatLen;	aPtr = aSeqPtr;	aSeq = new SeqWrap( aSeqPtr );	aPtr = (*aSeq).GetFirst();	while( *aPtr != -2 )	{		buf_idx[i++] = *aPtr;		aPtr = (*aSeq).GetNext();	}	delete aSeq;	int PatLen = i - 1;	int * Pat = buf_idx;/////////////////	ItemSet * anItemSet;	int Start;	Sup = 0;	Start = 0;	if( PatLen > 1 )	{		for( int i=0; i<PatLen; i++)		{			if( *(Pat + i) == -1 )			{				anItemSet = new ItemSet( i-Start, Pat+Start );				Start = i+1;				Add( anItemSet );			}		}		anItemSet = new ItemSet( i-Start, Pat+Start );		Add( anItemSet );	} else {		int tmp[1];		tmp[0] = *Pat;		anItemSet = new ItemSet( 1, tmp );		Add( anItemSet );	}/////////////////#endif // defined( _PERFORM_COMMON_PREFIX_CHECKING )}#if !defined( _USE_MAX_TREE )// Returns true if this sequence is the Max subset of aSeq.bool Sequence::IsMaxSubsetOf( Sequence * aSeq ){  ElementVector::iterator aSeqPtr;  ElementVector::iterator thisPtr;	int aSeqLen = (*aSeq).Elements.size();	int thisLen = Elements.size();	if( Elements.size() == 0 )		return true;	thisPtr = Elements.begin();	aSeqPtr = (*aSeq).Elements.begin();	if( aSeqLen >= thisLen && aSeqLen > 0 )	{		while( aSeqPtr != (*aSeq).Elements.end() )		{			if( (*(*thisPtr)).IsSubsetOf( (*aSeqPtr) ) )				thisPtr++;			if( thisPtr == Elements.end() )				return true;			aSeqPtr++;		}	}	return false;}#endif // !defined( _USE_MAX_TREE )void Sequence::Add( struct PROJ_SEQ * PrjSeq ){	ItemSet * anItemSet;	int * Start;	int * intPtr;	MoveLast();	anItemSet = Current();	if( (*PrjSeq).m_nProjCount > 1 )		intPtr = (*PrjSeq).m_ppSeq[0];	else		intPtr = (int *)(*PrjSeq).m_ppSeq;	// Should be improvemnet. 123	while( *intPtr != -1 && *intPtr != -2 )	{		(*anItemSet).Add( *intPtr );		intPtr ++;	}	while( *intPtr != -2 )	{		Start = intPtr;		while( *intPtr != -1 )		{ 			intPtr ++;		}		if( Start != intPtr )		{			anItemSet = new ItemSet( intPtr-Start, Start );			Add( anItemSet );		}		intPtr ++;	}}void Sequence::Print( FILE *aFile ){  ElementVector::iterator Itrtr;	fprintf( aFile, " <" );	for( Itrtr = Elements.begin(); Itrtr != Elements.end(); Itrtr++)		(*(*Itrtr)).Print( aFile );	fprintf( aFile, "> Support = %d\n", Sup );}Sequence::~Sequence(){  ElementVector::iterator Itrtr;	for( Itrtr = Elements.begin(); Itrtr != Elements.end(); Itrtr++)		delete *Itrtr;}//************************//************************//************************//************************//************************//************************#if defined( _USE_MAX_TREE )//************************//************************SeqTree::SeqTree( int ItemsCount ){	Root = new TreeNode();	NumOfItems = ItemsCount;	Header = new NodeVector[NumOfItems+1];	//Header = new NodeList[NumOfItems+1];	NumOfAdds = 0;	NumOfDels = 0;	NumOfAddIfClosed = 0;	NumIsMaxSubsetOf = 0;}bool TreeNodeLevelLess( TreeNode * a, TreeNode * b ){	return (*a).Level > (*b).Level;}int TreeNodeLevelCompare( TreeNode ** a, TreeNode ** b ){	if( (*(*a)).Level < (*(*b)).Level )		return 1;	else if( (*(*a)).Level > (*(*b)).Level )		return -1;	else   		return 0;	//return (*(*(*a)).Item).Compare( (*(*b)).Item );}void SeqTree::RemoveFromHeaderList( TreeNode * aNode ){	ItemSet * anItemSet;	int anItem;	TreeNode ** Res;  NodeVector::iterator Itrtr;	anItemSet = (*aNode).Item;	// Delete the links from the header table	for( int i=0; i<(*anItemSet).NumOfItems(); i++ )	{		anItem = (*anItemSet).Items[i];		Res = (TreeNode **) bsearch( &aNode, Header[anItem].begin(), Header[anItem].size(), sizeof( TreeNode *), (int (*)(const void*, const void*))TreeNodeLevelCompare );		if( !Res ) continue;		Itrtr = Res;				while( (*(*Itrtr)).Level == (*aNode).Level && Itrtr != Header[anItem].begin() ) 			Itrtr--;				while( (*(*Itrtr)).Level >= (*aNode).Level && Itrtr != Header[anItem].end() ) 		{			if( (*Itrtr) == aNode )				Itrtr = Header[anItem].erase( Itrtr );			else				 Itrtr++;		}	}	}void SeqTree::DeleteSequence( TreeNode * aNode ){	TreeNode * Parent;	if( (*aNode).NumOfChildren() == 0 && (*aNode).Parent )	{		RemoveFromHeaderList( aNode );		Parent = (*aNode).Parent;		//if( (*Parent).NumOfChildren() > 1 )			(*Parent).DelChild( aNode );		//DeleteSequence( (*aNode).Parent );		DeleteSequence( Parent );		delete aNode;	}}// If aSeq is a subset of the sequence in the tree with aNode as its last element.bool SeqTree::IsSubsetOfBranch( Sequence * aSeq, TreeNode * aNode ){	int NumOfRemElmnts;	ItemSet * anItemSet;	TreeNode * CurNode;	(*aSeq).MoveLast();	anItemSet = (*aSeq).Current();	CurNode = aNode;	NumOfRemElmnts = (*aSeq).NumOfElements();	NumIsMaxSubsetOf++;	if( (*CurNode).Level < NumOfRemElmnts )		return false;		while( true )	{		if( (*anItemSet).IsSubsetOf((*CurNode).Item) )		{			CurNode = (*CurNode).Parent;			(*aSeq).MovePrev();			anItemSet = (*aSeq).Current();			NumOfRemElmnts--;			if( NumOfRemElmnts == 0 )				return true;		} else {			CurNode = (*CurNode).Parent;			if( (*CurNode).Level < NumOfRemElmnts )				return false;		}	}}// Returns the item in the anItemSet, with shortest header list.int SeqTree::LeastFreqInHeader( ItemSet * anItemSet ){	int anItem;	int Res = -1;	int Min = 10000000;	int HeaderSize;	for( int i=0; i<(*anItemSet).NumOfItems(); i++ )	{		anItem = (*anItemSet).Items[i];		HeaderSize = Header[anItem].size();		if( HeaderSize < Min )		{			Min = HeaderSize;			Res = anItem;		}		if( Min==0 ) break;	}	return Res;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩高清不卡一区| 国产一区二区三区最好精华液| 天堂一区二区在线| 国产精品99久久久久久有的能看 | 日本aⅴ亚洲精品中文乱码| 中文字幕第一区二区| 99精品欧美一区二区三区综合在线| 国产日韩精品一区| 日韩成人一级片| 91首页免费视频| 2017欧美狠狠色| 日韩av网站在线观看| 欧美视频三区在线播放| 国产精品久久久爽爽爽麻豆色哟哟 | 成人福利在线看| 精品国产乱码久久久久久夜甘婷婷 | 国产精品免费人成网站| 精品无码三级在线观看视频 | 色悠悠久久综合| 国产精品免费观看视频| 亚洲啪啪综合av一区二区三区| 亚洲女同女同女同女同女同69| 亚洲女女做受ⅹxx高潮| 不卡一区二区在线| 欧美激情一区二区三区不卡| 国产精品亚洲第一| 国产拍揄自揄精品视频麻豆| 国产精品66部| 欧美激情艳妇裸体舞| 粉嫩嫩av羞羞动漫久久久| 欧美日韩中文一区| 五月婷婷综合网| 91精品中文字幕一区二区三区| 亚洲午夜av在线| 欧美精品久久一区| 日韩专区在线视频| 制服丝袜中文字幕一区| 日韩精品福利网| 日韩欧美在线观看一区二区三区| 理论电影国产精品| 精品电影一区二区| 粉嫩13p一区二区三区| 国产精品免费免费| 91麻豆视频网站| 午夜一区二区三区在线观看| 91精品国产欧美一区二区成人 | 欧美色精品天天在线观看视频| 香蕉影视欧美成人| 日韩一级片网站| 国产一区 二区 三区一级| 国产精品久久久久影院亚瑟| 91麻豆免费观看| 日韩高清不卡一区二区| 精品国产免费一区二区三区四区 | 欧美午夜影院一区| 日韩电影在线看| 久久久精品免费观看| 成人aaaa免费全部观看| 亚洲午夜日本在线观看| 精品电影一区二区三区| av电影一区二区| 蜜桃一区二区三区在线观看| 国产欧美日韩中文久久| 欧美网站大全在线观看| 国产盗摄一区二区| 亚洲四区在线观看| 欧美一级精品在线| 99久久国产综合精品色伊 | 91精品国产全国免费观看| 国产成人午夜片在线观看高清观看| 日韩理论片在线| 91精品国产欧美一区二区18| 懂色av噜噜一区二区三区av| 一区二区三区成人| 久久久久久影视| 91精品国产美女浴室洗澡无遮挡| 国产成都精品91一区二区三| 天天色图综合网| 亚洲天堂2014| 久久精品视频一区二区| 欧美日韩成人一区二区| 成人av网在线| 国产伦精品一区二区三区免费迷| 亚洲欧美日韩小说| 久久久久久99精品| 91精品国产高清一区二区三区 | 日韩三级视频中文字幕| 91网上在线视频| 国产美女精品人人做人人爽| 午夜久久久久久电影| 亚洲视频一区在线观看| 久久精品人人做人人综合| 在线不卡免费欧美| 色老汉av一区二区三区| www.亚洲色图.com| 国产乱码一区二区三区| 秋霞午夜av一区二区三区| 亚洲一区二区三区小说| 亚洲天堂免费看| 国产精品久久久久久久蜜臀| 久久综合99re88久久爱| 日韩免费高清av| 在线不卡免费av| 69堂国产成人免费视频| 欧美三级韩国三级日本三斤| 在线观看国产精品网站| 色94色欧美sute亚洲线路一ni| gogo大胆日本视频一区| 成人黄色国产精品网站大全在线免费观看| 精品一区二区影视| 国内精品嫩模私拍在线| 精品在线观看免费| 韩国一区二区视频| 国产在线播放一区三区四| 久久se精品一区精品二区| 日本欧美一区二区三区乱码| 三级欧美韩日大片在线看| 婷婷一区二区三区| 日韩电影在线免费观看| 久久草av在线| 国产在线视视频有精品| 国产九色精品成人porny| 国产成a人无v码亚洲福利| 懂色av一区二区三区蜜臀| 99国产精品99久久久久久| 色婷婷综合久久久久中文| 欧美视频一区在线| 欧美巨大另类极品videosbest | 欧美丝袜第三区| 51久久夜色精品国产麻豆| 精品国产欧美一区二区| 欧美韩国一区二区| 亚洲欧美另类小说视频| 五月激情丁香一区二区三区| 美女视频免费一区| 粉嫩13p一区二区三区| 在线欧美一区二区| 91精品国产入口| 国产欧美精品一区aⅴ影院| 中文字幕一区二区日韩精品绯色| 一区二区免费视频| 日韩av中文在线观看| 国产精品亚洲一区二区三区在线| 色婷婷国产精品综合在线观看| 欧美剧情片在线观看| 国产欧美一二三区| 天堂va蜜桃一区二区三区 | 中文字幕色av一区二区三区| 亚洲国产精品久久一线不卡| 国产.欧美.日韩| 91久久奴性调教| 欧美成人国产一区二区| 国产精品网站一区| 亚洲成av人片在www色猫咪| 极品少妇xxxx精品少妇| 91麻豆国产在线观看| 欧美一区二区啪啪| 亚洲国产成人在线| 日韩成人精品视频| 色综合网站在线| 欧美成人a∨高清免费观看| 日韩毛片一二三区| 国产二区国产一区在线观看| 欧美男男青年gay1069videost| 国产精品美女www爽爽爽| 日本不卡1234视频| 欧美性受xxxx| 欧美高清在线视频| 久久国产精品无码网站| 欧美日韩一区二区三区四区五区 | 欧美一级久久久久久久大片| 一区二区三区在线观看动漫| 国产精品一二三区在线| 日韩视频不卡中文| 亚洲一区二区三区美女| www.欧美日韩| 久久久久久久网| 免费成人在线观看视频| 欧美性生活一区| 亚洲精品国产无天堂网2021| 成人不卡免费av| 国产亚洲精品7777| 久久99最新地址| 欧美一区二区三区色| 亚洲国产成人精品视频| 色婷婷久久久综合中文字幕| ...xxx性欧美| 97se亚洲国产综合在线| 国产精品对白交换视频| 国产sm精品调教视频网站| 精品99一区二区三区| 蜜桃免费网站一区二区三区| 91精品国产色综合久久不卡蜜臀 | 亚洲精品第一国产综合野| 91丨国产丨九色丨pron| 国产精品久久久久久久浪潮网站 | 欧美一级高清片| 美女脱光内衣内裤视频久久网站 | 国产成人精品1024| 久久中文字幕电影|