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

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

?? genecluster.cpp

?? 用分類算法挖掘數據表達模式中的平移變化和放縮變化
?? CPP
字號:
// GeneCluster.cpp: implementation of the CGeneCluster class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "RegCluster.h"
#include "GeneCluster.h"

#include <cmath>
#include <iostream.h>

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CGeneCluster::CGeneCluster()
{
	SetUp();
}

CGeneCluster::~CGeneCluster()
{
	Destruct();
}

void CGeneCluster::SetUp()
{
	m_nGene = 0;
	m_nCond = 0;
	m_nMinC = 0;
	m_nMinG = 0;
	m_dEpsilon = 0;
	m_nCandGeneSize = 0;

	m_pGene = NULL;
	m_pCluster = NULL;
	m_pCandGene = NULL;
}

void CGeneCluster::Destruct()
{
	if(m_pCluster != NULL)
	{
		delete m_pCluster;
		m_pCluster = NULL;
	}
	if(m_pCandGene != NULL)
	{
		delete [] m_pCandGene;
		m_pCandGene = NULL;
	}
	if(m_pGene != NULL)
	{
		delete [] m_pGene;
		m_pGene = NULL;
	}
	
}

void CGeneCluster::initialize(int nGene, int nCond, double **pValue, 
							  double dGama, double dEpsilon, int nMinG, int nMinC)
{
	m_nGene = nGene;
	m_nCond = nCond;
	m_dEpsilon = dEpsilon;
	m_nMinG = nMinG;
	m_nMinC = nMinC;

	Destruct();
	m_pGene = new CGene[m_nGene];
	m_pCluster = new CCluster;
	//m_pCandGene = new int[m_nGene];
	
	m_pCluster->Initialize(nGene, nCond);
	for(int i = 0; i < m_nGene; ++i)
	{
		m_pGene[i].SetCondSize(nCond);
		m_pGene[i].SetGama(dGama);
		m_pGene[i].InitializeGene(pValue[i]);
		m_pGene[i].SortCondVal();
		m_pGene[i].ChainCond();

		m_pCluster->AppendGene(i, true);
		m_pCluster->AppendGene(i, false);

//		m_pCandGene[i] = -1;
	}

}

BOOL CGeneCluster::PruneOne(CCluster *&pC)
{
	if((pC->m_nPGene + pC->m_nNGene) < m_nMinG)
	{
		if(pC != NULL)
		{
			delete pC;
			pC = NULL;
		}
		return true;
	}
	return false;
}

BOOL CGeneCluster::PruneTwo(CCluster *pC)
{
	EstChainLen(pC);
	ScanCandCond(pC);
	return false;
}

// estimate the length of the chain
void CGeneCluster::EstChainLen(CCluster *pC)
{
	if(pC->m_nChainLen == 0)
	{
		return ;
	}
	///////////////rewrite
	int nLastCond = pC->m_pCondChain[pC->m_nChainLen-1];
	//------------------------------------
	for(int i = 0; i < m_nGene; ++i)
	{
		if(pC->m_pPGene[i] == 1)	// the ith gene is in the current gene set
		{
			int j = m_pGene[i].GetCondIndex(nLastCond);
			int nCount = 0;
			for(; j < m_nCond; ++j)
			{
				if(m_pGene[i].m_pChain[j] > -1)
				{
					++nCount;
				}
			}

			if((pC->m_nChainLen + nCount) < m_nMinC)	// chain length samll than the threshold MinC
			{
				pC->m_pPGene[i] = -1;
			}
		}
	}
}

// scan candidate condition
void CGeneCluster::ScanCandCond(CCluster *pC)
{
	if(pC->m_nChainLen == 0)
	{
		for(int i = 0; i < m_nGene; ++i)
		{
			// from begining to end
			int nCond = m_pGene[i].GetCondID(0);
			pC->m_pCandCond[nCond] = 1;
			for(int j = 1; j < m_nCond; ++j)
			{
				if(m_pGene[i].m_pCondVal[0] == m_pGene[i].m_pCondVal[j])
				{
					nCond = m_pGene[i].GetCondID(j);
					pC->m_pCandCond[nCond] = 1;					
				}
				else
				{
					break;
				}
			}
			// from end to beginning
			nCond = m_pGene[i].GetCondID(m_nCond-1);
			pC->m_pCandCond[nCond] = 1;
			for(j = m_nCond - 2; j >= 0; --j)
			{
				if(m_pGene[i].m_pCondVal[m_nCond-1] == m_pGene[i].m_pCondVal[j])
				{
					nCond = m_pGene[i].GetCondID(j);
					pC->m_pCandCond[nCond] = 1;					
				}
				else
				{
					break;
				}
			}
		}
		/*
		for(i = 0; i < pC->m_nChainLen; ++i)
		{
			pC->m_pCandCond[pC->m_pCondChain[i]] = -1;
		}
		*/
	}
	else
	{
		int nLastCond = pC->m_pCondChain[pC->m_nChainLen-1];	// get the last condition ID
		for(int i = 0; i < m_nGene; ++i)
		{
			int nIndex = m_pGene[i].GetCondIndex(nLastCond);	// get the index in pID
			for(int k = nIndex -1; k > 0; --k)
			{
				if(m_pGene[i].m_pChain[nIndex] == m_pGene[i].m_pChain[k])
				{
					--nIndex;
				}
				else
				{
					break;
				}
			}
			for(int j = nIndex + 1; j < m_nCond; ++j)
			{

				if(m_pGene[i].m_pChain[j] == nIndex)			// there is a chain point to the condition
				{
					int nCond = m_pGene[i].GetCondID(j);
					pC->m_pCandCond[nCond] = 1;

					// eliminate duplicate condition
					if(nCond == nLastCond)
					{
						pC->m_pCandCond[nCond] = -1;
					}

					/*
					for(int k = nIndex; k < m_nCond; ++k)
					{
						if(m_pGene[i].m_pCondVal[nIndex] == m_pGene[i].m_pCondVal[k])
						{
							int nCond = m_pGene[i].GetCondID(k);//nIndex	
							pC->m_pCandCond[nCond] = 1;						// set it in candidate list
						}
						else
						{
							break;
						}
					}
					*/
				}
			}
		}
	}
	for(int i = 0; i < pC->m_nChainLen; ++i)
	{
		pC->m_pCandCond[pC->m_pCondChain[i]] = -1;
	}
	// eliminate the same condition
}

BOOL CGeneCluster::PruneThr(CCluster *&pC)
{
	if(pC->m_nPGene < (m_nMinG / 2))
	{
		if(pC != NULL)
		{
			delete pC;
			pC = NULL;
		}
		return true;
	}
	//--------------test---------------------------
//	OutputClusterSet(pC);
	//--------------test---------------------------
	
	if( (pC->m_nChainLen >= m_nMinC) &&
		((pC->m_nPGene + pC->m_nNGene) >= m_nMinG) &&
		((pC->m_nPGene > pC->m_nNGene) ||
		((pC->m_nPGene == pC->m_nNGene) &&
		(pC->m_pCondChain[0] < pC->m_pCondChain[1]))))
	{
		BOOL bExsit = CheckExist(pC);	// true represent already exist
		if(bExsit)
		{
			if(pC != NULL)
			{
				delete pC;
				pC = NULL;
			}

			return true;
		}
		else
		{
			OutputClusterSet(pC);
			return false;
		}
	}
	/**/
	return false;
}

// check whether the cluster is already in the result cluster set
BOOL CGeneCluster::CheckExist(CCluster *pC)
{
	BOOL bExist = true;
	CCluster *p = m_pCluster;
	while(p != NULL)
	{
		// check the order********************************
		for(int i = 0; i < m_nGene; ++i)
		{
			if(p->m_pPGene[i] != pC->m_pPGene[i])
			{
				bExist = false;
				break;
			}
			if(p->m_pNGene[i] != pC->m_pNGene[i])
			{
				bExist = false;
				break;
			}

		}
		for(i = 0; i < m_nCond; ++i)
		{
			if(p->m_pCondChain[i] != pC->m_pCondChain[i])
			{
				bExist = false;
			}
		}

		p = p->m_pNext;
	}
	return bExist;
}

void CGeneCluster::OutputClusterSet(CCluster *pC)
{
	CCluster *p = m_pCluster;
	if(p == pC)
	{
		return;
	}
	while(p->m_pNext != NULL)
	{
		p = p->m_pNext;
	}
	p->m_pNext = pC;
}

BOOL CGeneCluster::PruneFur(CCluster *pC)
{
	for(int i = 0; i < m_nCond; ++i)
	{
		if(pC->m_pCandCond[i] == 1)
		{
			int *pCandGene = new int[m_nGene];
			int nCandGeneSize = 0;

			ExplrSubsetGene(pC, i, pCandGene, nCandGeneSize);
			SlideOverGene(pC, i, pCandGene, nCandGeneSize);

			if(pCandGene != NULL)
			{
				delete [] pCandGene;
				pCandGene = NULL;
			}
		}

	}
	return false;
}

void CGeneCluster::ExplrSubsetGene(CCluster *pC, int nCond, int *&pCandGene, int &nCandGeneSize)
{
	for(int i = 0; i < m_nGene; ++i)
	{
		//m_pCandGene[i] = -1;
		pCandGene[i] = -1;
	}
	int nCount = 0;	// record the size of candidate gene

	//int nLastCond = pC->m_pCandCond[pC->m_nChainLen-1];
	int nLastCond = 0;
	if(pC->m_nChainLen == 0)
	{
		for(int i = 0; i < m_nGene; ++i)
		{
			//m_pCandGene[i] = -1;
			pCandGene[i] = i;
			m_pGene[i].m_dCohert = 0;
		}
		nCandGeneSize = m_nGene;
	}
	else
	{
		nLastCond = pC->m_pCondChain[pC->m_nChainLen-1];
		// find the candidate gene
		for(i = 0; i < m_nGene; ++i)
		{
			int nPreIndex = m_pGene[i].GetCondIndex(nLastCond);
			int nOrigionIndex = nPreIndex;

			for(int k = nPreIndex -1; k > 0; --k)
			{
				if(m_pGene[i].m_pChain[nPreIndex] == m_pGene[i].m_pChain[k])
				{
					--nPreIndex;
				}
				else
				{
					break;
				}
			}
			int nSucIndex = m_pGene[i].GetCondIndex(nCond);
			if((m_pGene[i].m_pChain[nSucIndex] == nPreIndex))// ||	
			  /* (m_pGene[i].m_pChain[nPreIndex] == nSucIndex))*/
			{
				//m_pCandGene[nCount] = i;
				pCandGene[nCount] = i;
				++nCount;
				//m_pGene[i].m_dCohert = m_pGene[i].CalculateCohert(pC->m_pCandCond[0], pC->m_pCandCond[1], pC->m_pCandCond[pC->m_nChainLen-1], nCond);
				m_pGene[i].m_dCohert = m_pGene[i].CalculateCohert(pC->m_pCondChain[0], 
																  pC->m_pCondChain[1], 
																  pC->m_pCondChain[pC->m_nChainLen-1], 
																  nCond);
			}
			else 
			{
				for(int k = nSucIndex -1; k > 0; --k)
				{
					if(m_pGene[i].m_pChain[nSucIndex] == m_pGene[i].m_pChain[k])
					{
						--nSucIndex;
					}
					else
					{
						break;
					}
				}
				if(m_pGene[i].m_pChain[nOrigionIndex] == nSucIndex)
				{
					//m_pCandGene[nCount] = i;
					pCandGene[nCount] = i;
					++nCount;
					//m_pGene[i].m_dCohert = m_pGene[i].CalculateCohert(pC->m_pCandCond[0], pC->m_pCandCond[1], pC->m_pCandCond[pC->m_nChainLen-1], nCond);
					m_pGene[i].m_dCohert = m_pGene[i].CalculateCohert(pC->m_pCondChain[0], 
																	  pC->m_pCondChain[1], 
																	  pC->m_pCondChain[pC->m_nChainLen-1], 
																	  nCond);
				}
			}
		}
		nCandGeneSize = nCount;
	}
	

	// insertsort the candidate gene by coherence in nondescending order
	for(int j = 1; j < nCandGeneSize; ++j)
	{
		double val = m_pGene[pCandGene[j]].m_dCohert;
		int id = pCandGene[j];
		int i = j - 1;

		while((i >= 0) && (m_pGene[pCandGene[i]].m_dCohert > val))
		{
			pCandGene[i+1] = pCandGene[i];
			--i;
		}
		pCandGene[i+1] = id;
	}

}

void CGeneCluster::SlideOverGene(CCluster *pC, int nCond, int *&pCandGene, int &nCandGeneSize)
{
	for(int i = m_nMinG; i <= nCandGeneSize; ++i)
	{
		for(int j = 0; j <= nCandGeneSize - i; ++j)
		{
			BOOL bValid = true;
		 // -----------keep--------
		/**/	for(int m = 0; m < i; ++m)
			{
				for(int n = m + 1; n < i; ++n)
				{
					bValid = ValidateCoher(&m_pGene[pCandGene[j+m]],
										   &m_pGene[pCandGene[j+n]],
									       pC->m_pCondChain);	
					if(bValid == false)
					{
						//return;
						break;
					}
				}
				if(bValid == false)
				{
					break;
				}
			}
		
			if(bValid == false)
			{
				continue;
			}
		
			// append new cluster to the result chain
			CCluster * p = new CCluster;
			p->Initialize(m_nGene, m_nCond);

			// distinguish positive and negative
			if(pC->m_nChainLen == 0)
			{
				for(int k = 0; k < i; ++k)
				{
					int nCondIndex = m_pGene[pCandGene[j+k]].GetCondIndex(nCond);
					if(nCondIndex < (m_nCond / 2))
					{
						p->AppendGene(pCandGene[j+k], true);
					}
					else
					{
						p->AppendGene(pCandGene[j+k], false);
					}
				}

			}
			else
			{
				if(pC->m_nChainLen == 3)
				{
					int stop = 1;
				}

				for(int k = 0; k < i; ++k)
				{
					//-------------rewrite------------------------------------------
					if( m_pGene[pCandGene[j+k]].m_pCondVal[m_pGene[pCandGene[j+k]].GetCondIndex(pC->m_pCondChain[0])] <= 
						m_pGene[pCandGene[j+k]].m_pCondVal[m_pGene[pCandGene[j+k]].GetCondIndex(pC->m_pCondChain[pC->m_nChainLen-1])])
					{
						if(pC->m_pPGene[pCandGene[j+k]] == 1)
						{
							p->AppendGene(pCandGene[j+k], true);
						}
						else if(pC->m_pNGene[pCandGene[j+k]] == 1)
						{
							p->AppendGene(pCandGene[j+k], false);
						}
					}
					else
					{
						p->AppendGene(pCandGene[j+k], false);
					}
				}
			}
			cout<<"condition:";
			for(int k = 0; k < pC->m_nChainLen; ++k)
			{
				p->AppendCond(pC->m_pCondChain[k]);
				cout<<pC->m_pCondChain[k]<<",";
			}
			p->AppendCond(nCond);
			cout<<nCond<<endl;
			// recursive invoke hereafter
			MineCluster(p);
		}
	}
}

BOOL CGeneCluster::ValidateCoher(CGene *p1, CGene *p2, int *pCond)
{
	if(pCond[0] == -1)
	{
		return true;
	}
	for(int i = 1; i < m_nCond; ++i)
	{
		if(pCond[i] == -1)
		{
			return true;
		}
		double dCoher1 = p1->CalculateCohert(pCond[0], pCond[1], pCond[i-1], pCond[i]);
		double dCoher2 = p2->CalculateCohert(pCond[0], pCond[1], pCond[i-1], pCond[i]);
		if(fabs(dCoher1 - dCoher2) > m_dEpsilon)
		{
			return false;
		}
	}
	return true;
}

void CGeneCluster::MineCluster(CCluster *p)
{
	if(PruneOne(p))
	{
		return;
	}
	if(PruneThr(p))
	{
		return;
	}
                                             
	PruneTwo(p);
	PruneFur(p);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美男同性恋视频网站| 911国产精品| 欧美一区在线视频| 国产精品毛片无遮挡高清| 亚洲成av人影院在线观看网| 国产91精品露脸国语对白| 91高清视频在线| 国产欧美日产一区| 久久精品国产一区二区| 在线观看免费视频综合| 国产精品美女一区二区三区| 精品一区二区影视| 在线成人高清不卡| 一区二区三区不卡视频| 99精品国产视频| 久久久亚洲精品石原莉奈 | 日本韩国一区二区三区视频| 26uuu精品一区二区在线观看| 亚洲成人中文在线| 欧美亚洲免费在线一区| 亚洲免费高清视频在线| 99热在这里有精品免费| 欧美国产日产图区| 国产99久久久久| 久久久久99精品一区| 精品一区二区免费在线观看| 日韩一区二区三| 美腿丝袜一区二区三区| 91精品国产综合久久精品性色| 亚洲国产裸拍裸体视频在线观看乱了| 91丨porny丨国产| 亚洲欧美aⅴ...| 91国产精品成人| 亚洲综合久久久久| 欧美丰满一区二区免费视频| 丝袜亚洲另类丝袜在线| 欧美肥妇free| 国产伦理精品不卡| 亚洲国产精品av| 色综合天天综合网国产成人综合天| 国产精品久久久久一区| 99国产精品久久久| 亚洲香肠在线观看| 91精品久久久久久蜜臀| 精品亚洲porn| 国产精品久久久久久亚洲伦| 91一区在线观看| 亚洲午夜激情网页| 欧美mv日韩mv国产| 成人综合婷婷国产精品久久蜜臀 | jiyouzz国产精品久久| 中文字幕欧美一区| 色婷婷综合久久久久中文一区二区 | 一区二区在线观看av| 欧美色偷偷大香| 黑人精品欧美一区二区蜜桃 | 久久久久97国产精华液好用吗| 国产一区999| 亚洲少妇中出一区| 日韩一区二区麻豆国产| 国产91精品免费| 五月婷婷色综合| 日本一区二区三区国色天香 | 久久日韩精品一区二区五区| 成人开心网精品视频| 亚洲成人黄色小说| 久久久欧美精品sm网站| 欧美午夜一区二区三区免费大片| 日本在线观看不卡视频| 国产精品乱码人人做人人爱| 欧美日韩一级片在线观看| 国产精品99久久久久久久vr| 樱桃国产成人精品视频| 久久亚洲精精品中文字幕早川悠里 | 91麻豆精品国产91久久久久久久久| 麻豆91在线播放免费| 一区在线播放视频| 欧美成人猛片aaaaaaa| 色综合天天综合| 国产精品香蕉一区二区三区| 午夜成人免费视频| 亚洲婷婷综合色高清在线| 日韩精品专区在线影院重磅| 色美美综合视频| 国产999精品久久久久久| 免费观看久久久4p| 亚洲国产裸拍裸体视频在线观看乱了 | 成人一区二区三区视频在线观看| 天天av天天翘天天综合网色鬼国产| 国产欧美精品一区二区色综合 | 丰满白嫩尤物一区二区| 日本sm残虐另类| 亚洲图片欧美色图| 中文字幕色av一区二区三区| 久久久亚洲精品石原莉奈 | 国精产品一区一区三区mba视频 | 91久久线看在观草草青青| 国产精品1区2区| 美女视频黄频大全不卡视频在线播放| 精品国产乱码久久久久久久| 99久久99久久精品免费看蜜桃| 1024成人网| 国产成人啪午夜精品网站男同| 亚洲欧美视频在线观看视频| 国产精品伦一区| 日韩一区二区高清| 欧美日韩国产小视频| 欧美三级韩国三级日本三斤| 97久久精品人人澡人人爽| 国产成人免费视频网站| 国产一区二区三区四区在线观看| 久久不见久久见免费视频7| 三级欧美韩日大片在线看| 亚洲福利视频导航| 五月开心婷婷久久| 日韩主播视频在线| 日本一道高清亚洲日美韩| 日本vs亚洲vs韩国一区三区二区| 日韩国产在线观看| 老司机精品视频一区二区三区| 蜜臀久久久久久久| 国产99久久久国产精品免费看| 老鸭窝一区二区久久精品| 久久国产三级精品| 丁香亚洲综合激情啪啪综合| 高清不卡一区二区在线| 99久久精品国产麻豆演员表| 色综合久久中文综合久久97| 欧美中文字幕一区二区三区| 欧美日韩亚洲综合在线| 日韩欧美一区中文| 国产三区在线成人av| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 成人激情开心网| 色网综合在线观看| 7777精品伊人久久久大香线蕉完整版| 91精品国产色综合久久不卡电影 | 欧美一区二区三区免费在线看| 欧美一区在线视频| 久久综合久久鬼色中文字| 中文一区二区完整视频在线观看 | 中文字幕精品—区二区四季| 亚洲欧美另类小说| 日本亚洲最大的色成网站www| 精品亚洲porn| 91年精品国产| 欧美一级二级三级乱码| 国产日韩综合av| 亚洲大片一区二区三区| 国产制服丝袜一区| 日本韩国精品在线| 久久久久免费观看| 亚洲综合丝袜美腿| 韩日av一区二区| 欧美性淫爽ww久久久久无| xnxx国产精品| 亚洲国产另类av| 久久99久久久欧美国产| 精品国产青草久久久久福利| 一区二区三区免费看视频| 日一区二区三区| 一区二区三区.www| 天天综合色天天| 粉嫩av一区二区三区粉嫩| 欧美日韩国产区一| 欧美国产精品一区二区| 青青青伊人色综合久久| 色综合久久中文字幕| 2019国产精品| 丝袜诱惑制服诱惑色一区在线观看 | 欧美一级欧美三级在线观看| 国产日韩亚洲欧美综合| 免费视频最近日韩| 日本韩国视频一区二区| 国产精品女主播在线观看| 激情综合网av| 9191久久久久久久久久久| 亚洲免费av在线| 99久久精品国产一区二区三区| 色综合一个色综合| 亚洲黄一区二区三区| 国产毛片精品视频| 中文在线一区二区| 国产欧美日韩不卡免费| 日本91福利区| 欧美人动与zoxxxx乱| 日韩毛片视频在线看| 国产一区二区三区| 日韩午夜激情av| 日本欧美一区二区| 欧美一区二区在线视频| 亚洲电影视频在线| 久久久国际精品| 美脚の诱脚舐め脚责91| 91精品国产高清一区二区三区蜜臀| 亚洲国产毛片aaaaa无费看| 在线欧美日韩精品| 亚洲国产精品影院| 在线91免费看| 麻豆精品一区二区三区|