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

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

?? phase4.c

?? 數(shù)據(jù)挖掘算法BIRCH源碼 c語言版本。
?? C
字號:
/****************************************************************File Name: phase4.C   Author: Tian Zhang, CS Dept., Univ. of Wisconsin-Madison, 1995               Copyright(c) 1995 by Tian Zhang                   All Rights ReservedPermission to use, copy and modify this software must be grantedby the author and provided that the above copyright notice appear in all relevant copies and that both that copyright notice and this permission notice appear in all relevant supporting documentations. Comments and additions may be sent the author at zhang@cs.wisc.edu.******************************************************************/#include "global.h"#include "util.h"#include "timeutil.h"#include "vector.h"#include "rectangle.h"#include "cfentry.h"#include "cutil.h"#include "parameter.h"#include "status.h"#include "phase4.h"extern Para* Paras;static int ClosestNorm(double tmpnorm,double *norms,int start,int end){if (end-start==1) {	if (tmpnorm>norms[end]) return end;	if (tmpnorm<norms[start]) return start;	if (tmpnorm-norms[start]<norms[end]-tmpnorm) 		return start;	else 	return end;	}int median=(start+end)/2;if (tmpnorm>norms[median]) 	return ClosestNorm(tmpnorm,norms,median,end);else 	return ClosestNorm(tmpnorm,norms,start,median);}static int MinLargerThan(double tmpnorm,double *norms,int start,int end){int median;if (start>=end) return start;median=(start+end)/2;if (tmpnorm>norms[median])	return MinLargerThan(tmpnorm,norms,median+1,end);else 	return MinLargerThan(tmpnorm,norms,start,median);}static int MaxSmallerThan(double tmpnorm,double *norms,int start,int end){int median;if (start>=end) return start;median=(start+end+1)/2;if (tmpnorm<norms[median])	return MaxSmallerThan(tmpnorm,norms,start,median-1);else 	return MaxSmallerThan(tmpnorm,norms,median,end);}static int ClosestCenter(int &i, double &idist, const Vector &v,			 const Vector *centers, int imin, int imax,			 const double *matrix, int n){int k,count=0;double d;k=imin;while (k<=imax) {  if (k<i && matrix[k*n-k*(k+1)/2+i-k-1]<=4*idist) {	d=v||centers[k]; count++;	if (d<idist) {idist=d;i=k;}	}  else if (k>i && matrix[i*n-i*(i+1)/2+k-i-1]<=4*idist) {	d=v||centers[k]; count++;	if (d<idist) {idist=d;i=k;}	}  k++;  }return count;}static void ClosestCenter(int &imin, double &dmin, const Vector &v, 			  const Vector *centers, int num) {double d;imin=0; dmin = v||centers[0];for (int i=1; i<num; i++) {	d = v||centers[i];	if (d<dmin) {imin=i; dmin=d;}	}}static void Swap(Vector *centers, double *norms, int i, int j){Vector tmpcenter;tmpcenter.Init(centers[0].dim);double tmpnorm;tmpcenter=centers[i];tmpnorm=norms[i];centers[i]=centers[j];norms[i]=norms[j];centers[j]=tmpcenter;norms[j]=tmpnorm;}/** Relevant to QuickSort: which is not critical becauseit is only run once for each scan of the whole dataset. */static void Swap(Vector *centers, double *norms, double *radii, int i, int j){Vector tmpcenter;tmpcenter.Init(centers[0].dim);double tmpnorm;double tmpradius;tmpcenter=centers[i];tmpnorm=norms[i];tmpradius=radii[i];centers[i]=centers[j];norms[i]=norms[j];radii[i]=radii[j];centers[j]=tmpcenter;norms[j]=tmpnorm;radii[j]=tmpradius;}static int Split(Vector *centers, double *norms, int start, int end){int median=(start+end)/2;Swap(centers,norms,start,median);int i=start+1;int j=end;while (i<=j) {    if (norms[i]<=norms[start]) i++;    else {Swap(centers,norms,i,j); j--;}    }Swap(centers,norms,start,j);return j;}static int Split(Vector *centers, double *norms, double *radii, int start, int end){int median=(start+end)/2;Swap(centers,norms,radii,start,median);int i=start+1;int j=end;while (i<=j) {    if (norms[i]<=norms[start]) i++;    else {Swap(centers,norms,radii,i,j); j--;}    }Swap(centers,norms,radii,start,j);return j;}static void QuickSort(Vector *centers, double *norms, int start, int end){int SplitPoint;if (start<end) {SplitPoint=Split(centers,norms,start,end);	  QuickSort(centers,norms,start,SplitPoint-1);	  QuickSort(centers,norms,SplitPoint+1,end);	 }}static void QuickSort(Vector *centers, double *norms, double *radii, int start, int end){int SplitPoint;if (start<end) {SplitPoint=Split(centers,norms,radii,start,end);	  QuickSort(centers,norms,radii,start,SplitPoint-1);	  QuickSort(centers,norms,radii,SplitPoint+1,end);	 }}static int MaxRefinePass(Stat **Stats){int maxpass=0;for (int i=0; i<Paras->ntrees; i++) 	if (Stats[i]->MaxRPass>maxpass) maxpass=Stats[i]->MaxRPass;return maxpass;}static int RedistributeA(Stat* Stats,Vector* centers,double *radii,const Vector& tmpv) {     int i;     double idist;     ClosestCenter(i,idist,tmpv,centers,Stats->CurrEntryCnt);     if (Stats->NoiseFlag==1 && idist>4*radii[i]) {		Stats->NoiseCnt++;		return -1;		}     else {		Stats->Entries[i].n += 1;		Stats->Entries[i].sx += tmpv;		Stats->Entries[i].sxx += (tmpv&&tmpv);		return i;		}}static void UpdateMatrix(int n, Vector *centers, double *matrix){int i,j;for (i=0;i<n-1;i++)   for (j=i+1;j<n;j++)	   matrix[i*n-i*(i+1)/2+j-i-1]=centers[i]||centers[j];}static int RedistributeB(Stat* Stats,Vector* centers,double *norms,double *radii,double *matrix,const Vector& tmpv){int    imin,imax,i,k,n,start,end,median;double d,tmpnorm,idist,tmpdist;  n=Stats->CurrEntryCnt;  tmpnorm=sqrt(tmpv&&tmpv);  // i=ClosestNorm(tmpnorm,norms,0,n-1);  // for efficiency, replace recursion by iteration  start=0;  end=n-1;  while(start<end) {    if (end-start==1) {      if (tmpnorm>norms[end]) i=start=end;      else if (tmpnorm<norms[start]) i=end=start;           else if (tmpnorm-norms[start]<norms[end]-tmpnorm) 			i=end=start;                else i=start=end;      }    else {      median=(start+end)/2;      if (tmpnorm>norms[median]) start=median;      else end=median;      }    }    idist=tmpv||centers[i];    // imin=MinLargerThan(tmpnorm-sqrt(idist),norms,0,n-1);    // imax=MaxSmallerThan(tmpnorm+sqrt(idist),norms,0,n-1);    // for efficiency, replace recursion by iteration    tmpdist=tmpnorm-sqrt(idist);    start=0;    end=n-1;    while (start<end) {      median=(start+end)/2;      if (tmpdist>norms[median]) start=median+1;      else end=median;      }    imin=start;    tmpdist=tmpnorm+sqrt(idist);    start=0;    end=n-1;    while(start<end) {      median=(start+end+1)/2;      if (tmpdist<norms[median]) end=median-1;      else start=median;      }    imax=start;    // ClosestCenter(i,idist,tmpv,centers,imin,imax,matrix,n);    // for efficiency, replace procedure by inline    k=imin;    while (k<=imax) {      if (k<i && matrix[k*n-k*(k+1)/2+i-k-1]<=4*idist) {         d=tmpv||centers[k];	 if (d<idist) {idist=d;i=k;}	 }      else if (k>i && matrix[i*n-i*(i+1)/2+k-i-1]<=4*idist) {         d=tmpv||centers[k];	 if (d<idist) {idist=d;i=k;}	 }      k++;      }     if (Stats->NoiseFlag==1 && idist>4*radii[i]) {		Stats->NoiseCnt++;		return -1;		}     else {		Stats->Entries[i].n += 1;		Stats->Entries[i].sx += tmpv;		Stats->Entries[i].sxx += (tmpv&&tmpv);		return i;		}}	void BirchPhase4(Stat **Stats) {ofstream tmpfile;char     tmpname[MAX_NAME];int i, j, k, maxk, clusteri;// 1. allocate spaceVector **centers = new Vector*[Paras->ntrees];double **norms = new double*[Paras->ntrees];double **radii = new double*[Paras->ntrees];double **matrix = new double*[Paras->ntrees];#ifdef LABEL ofstream *labfiles=new ofstream[Paras->ntrees];#endif LABEL #ifdef FILTERofstream **filterfiles=new ofstream*[Paras->ntrees];#endif FILTER#ifdef SUMMARYint	 **n = new int*[Paras->ntrees];Vector   **sx = new Vector*[Paras->ntrees];Vector   **sxx = new Vector*[Paras->ntrees];#endif SUMMARYfor (i=0; i<Paras->ntrees; i++) {	centers[i]=new Vector[Stats[i]->CurrEntryCnt];	for (j=0;j<Stats[i]->CurrEntryCnt;j++) 		centers[i][j].Init(Stats[i]->Dimension);	norms[i]=new double[Stats[i]->CurrEntryCnt];	radii[i]=new double[Stats[i]->CurrEntryCnt];	matrix[i]=new double[Stats[i]->CurrEntryCnt*(Stats[i]->CurrEntryCnt-1)/2];#ifdef LABEL 	sprintf(tmpname,"%s-label",Stats[i]->name);	labfiles[i].open(tmpname); #endif LABEL#ifdef FILTER	filterfiles[i]=new ofstream[Stats[i]->CurrEntryCnt];	for (j=0;j<Stats[i]->CurrEntryCnt;j++) {		sprintf(tmpname,"%s-dat-%d",Stats[i]->name,j);		filterfiles[i][j].open(tmpname);		}#endif FILTER#ifdef SUMMARY	n[i]=new int[Stats[i]->CurrEntryCnt];	sx[i]=new Vector[Stats[i]->CurrEntryCnt];	sxx[i]=new Vector[Stats[i]->CurrEntryCnt];	for (j=0;j<Stats[i]->CurrEntryCnt;j++) {		n[i][j]=0;		sx[i][j].Init(Paras->attrcnt);		sxx[i][j].Init(Paras->attrcnt);		}#endif SUMMARY	}// 2. prepare to read dataRecId recid1,recidi;DevStatus dstat;Paras->attrproj->FirstRecId(recid1);Vector vector;vector.Init(Paras->attrcnt);VectorArray *vectors;Paras->attrproj->CreateRecordList(vectors);Vector *tmpvecs=new Vector[Paras->ntrees];for (i=0;i<Paras->ntrees;i++)	tmpvecs[i].Init(Stats[i]->Dimension);for (i=0;i<Paras->ntrees;i++) {	Stats[i]->Phase=4;	Stats[i]->Passi=0;	}maxk=MaxRefinePass(Stats);// 2.1 as long as there is one tree needed to refinefor (k=0; k<maxk; k++) {   // 1. find initial centers, radii, norms, matrix   for (i=0; i<Paras->ntrees; i++) 	if (k<Stats[i]->MaxRPass) {	     Stats[i]->Passi=k;	     Stats[i]->NoiseCnt=0;	     for (j=0; j<Stats[i]->CurrEntryCnt; j++) {	        centers[i][j].Div(Stats[i]->Entries[j].sx,				  Stats[i]->Entries[j].n);	        radii[i][j]=Stats[i]->Entries[j].Radius();	        Stats[i]->Entries[j]=0;	        }	     if (Stats[i]->RefineAlg==1) {	        for (j=0; j<Stats[i]->CurrEntryCnt; j++)	           norms[i][j]=sqrt(centers[i][j]&&centers[i][j]);	        QuickSort(centers[i],norms[i],radii[i],0,Stats[i]->CurrEntryCnt-1);	        UpdateMatrix(Stats[i]->CurrEntryCnt,centers[i],matrix[i]);	        }	     }   // 2. scan data   for (recidi=recid1; ; recidi++) {#ifdef FILTER	dstat=Paras->attrproj->ReadWholeRec(recidi,vector);	if (dstat!=StatusOk) break;#endif FILTER#ifdef SUMMARY	dstat=Paras->attrproj->ReadWholeRec(recidi,vector);	if (dstat!=StatusOk) break;#endif SUMMARY	dstat=Paras->attrproj->ReadRec(recidi,*vectors);	if (dstat!=StatusOk) break;	for (i=0; i<Paras->ntrees; i++) {	   if (k<Stats[i]->MaxRPass) {		tmpvecs[i]=*(vectors->GetVector(i));		if (Stats[i]->WMflag)		  tmpvecs[i].Transform(Stats[i]->W,Stats[i]->M);		switch (Stats[i]->RefineAlg) {		  case 0: clusteri=RedistributeA(Stats[i],centers[i],radii[i],tmpvecs[i]);	 	          break;		  case 1: clusteri=RedistributeB(Stats[i],centers[i],norms[i],radii[i],matrix[i],tmpvecs[i]);	 		  break;		  default: print_error("BirchPhase4","Invalid refine method");			  break;		  }#ifdef LABEL 		labfiles[i]<<clusteri<<endl;#endif LABEL #ifdef FILTER		filterfiles[i][clusteri]<<vector<<endl;#endif FILTER#ifdef SUMMARY		if (clusteri>=0) {				    	n[i][clusteri]++;		    	sx[i][clusteri]+=vector;			sxx[i][clusteri].AddSqr(vector);			}#endif SUMMARY		}	    }	}   }delete vectors;delete [] tmpvecs;// 3 output resultsfor (i=0; i<Paras->ntrees; i++) {	delete [] centers[i];	delete [] norms[i];	delete [] radii[i];	delete [] matrix[i];   if (Stats[i]->MaxRPass>0) {     // quality and output     sprintf(tmpname,"%s-refcluster",Stats[i]->name);     tmpfile.open(tmpname);     Paras->logfile<<Stats[i]->name<<":"		   <<"Quality of Phase4 "	           <<Quality(Stats[i]->Qtype,			     Stats[i]->CurrEntryCnt,			     Stats[i]->Entries)		   <<endl;     for (j=0;j<Stats[i]->CurrEntryCnt;j++)	tmpfile<<Stats[i]->Entries[j]<<endl;     tmpfile.close();#ifdef LABEL      labfiles[i].close();#endif LABEL #ifdef FILTER     for (j=0;j<Stats[i]->CurrEntryCnt;j++)     	filterfiles[i][j].close();     delete [] filterfiles[i];#endif FILTER#ifdef SUMMARY     sprintf(tmpname,"%s-summary",Stats[i]->name);     tmpfile.open(tmpname);     for (j=0;j<Stats[i]->CurrEntryCnt;j++) 		tmpfile<<n[i][j]<<" "		       <<sx[i][j]		       <<sxx[i][j]		       <<endl;     delete [] n[i];     delete [] sx[i];     delete [] sxx[i];     tmpfile.close();#endif SUMMARY     }   }delete [] centers;delete [] norms;delete [] radii;delete [] matrix;#ifdef LABEL delete [] labfiles;#endif LABEL#ifdef FILTERdelete [] filterfiles;#endif FILTER#ifdef SUMMARYdelete [] n;delete [] sx;delete [] sxx;#endif SUMMARY}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
综合激情网...| 91精品国产91久久久久久一区二区 | 国产精品18久久久| 日韩欧美一区二区免费| 国产精品麻豆久久久| 国产99久久久久| 国产三级精品三级在线专区| 激情久久五月天| www日韩大片| 国产一区二区三区免费观看| 久久人人97超碰com| 国产在线乱码一区二区三区| 精品久久久久久无| 国产一区不卡在线| 国产欧美日韩中文久久| 国产 日韩 欧美大片| 国产精品久久久一本精品 | 欧美日韩一区二区三区在线| 一区二区三区精品视频在线| 欧美性感一区二区三区| 亚洲444eee在线观看| 欧美日本一区二区在线观看| 日韩国产欧美在线播放| 91精品午夜视频| 久久91精品久久久久久秒播| 久久久噜噜噜久噜久久综合| 粉嫩一区二区三区性色av| 国产精品国产成人国产三级| 中文字幕乱码亚洲精品一区| 国产成人精品免费在线| 亚洲欧美国产三级| 91 com成人网| 国产成人在线观看免费网站| 亚洲欧洲日韩在线| 欧美三级日韩三级| 激情综合色播激情啊| 国产精品福利一区| 欧美人与禽zozo性伦| 极品少妇xxxx精品少妇偷拍| 欧美激情一区二区三区不卡 | 国产一区二区女| 中文字幕一区二区在线播放| 欧美色视频在线| 韩国一区二区三区| 亚洲精品视频在线| 2020国产精品自拍| 色哟哟一区二区在线观看| 日本不卡一区二区三区 | 欧美精品一区二区三区四区| 99久久久精品免费观看国产蜜| 亚洲午夜电影网| 国产欧美日韩精品一区| 欧美日韩精品一区二区三区蜜桃| 国产高清久久久久| 香蕉影视欧美成人| 国产精品久久三区| 精品嫩草影院久久| 在线观看国产日韩| 国产激情视频一区二区三区欧美 | 粉嫩欧美一区二区三区高清影视| 亚洲第一精品在线| 国产精品人成在线观看免费| 欧美日韩1区2区| 99国产麻豆精品| 狠狠色丁香久久婷婷综| 亚洲电影一区二区三区| 国产精品美女久久久久久久久久久| 欧美精品一级二级三级| 91丨九色丨尤物| 国产一区二区三区在线观看免费视频| 亚洲综合免费观看高清完整版| 欧美r级在线观看| 欧美日韩成人在线| 色网综合在线观看| 国产成人精品三级麻豆| 久久国产精品第一页| 亚洲成av人片| 一区二区视频在线看| 中文字幕欧美区| 久久综合久久鬼色中文字| 91精品国产色综合久久不卡电影| 色婷婷综合久久久久中文一区二区| 国内精品视频666| 麻豆视频一区二区| 日韩精品成人一区二区在线| 亚洲一区中文在线| 亚洲老妇xxxxxx| 亚洲特黄一级片| 亚洲欧美综合网| 中文字幕乱码日本亚洲一区二区| 欧美精品一区二区蜜臀亚洲| 日韩视频一区二区三区| 欧美日韩国产系列| 欧美日韩色综合| 欧美日韩一区二区电影| 91高清在线观看| 日本精品裸体写真集在线观看| 99久久99久久综合| 99麻豆久久久国产精品免费优播| 成人午夜激情视频| 成人av网在线| 91网站视频在线观看| 一本色道久久综合亚洲aⅴ蜜桃 | 制服丝袜成人动漫| 欧美肥妇bbw| 欧美一级夜夜爽| 欧美成人猛片aaaaaaa| 欧美不卡在线视频| 精品国产乱码久久久久久牛牛 | 久久精品久久精品| 捆绑紧缚一区二区三区视频 | 国产在线一区二区综合免费视频| 国产在线不卡一卡二卡三卡四卡| 国产一区二区三区观看| 国产成人在线免费观看| 成人黄色av网站在线| 91免费观看视频| 欧美老女人在线| 欧美成人性战久久| 欧美高清在线一区| 亚洲精选视频在线| 三级精品在线观看| 狠狠v欧美v日韩v亚洲ⅴ| 国产成人综合网站| 99久久精品情趣| 一区二区三区精品视频| 亚洲高清免费观看高清完整版在线观看| 午夜私人影院久久久久| 蜜桃久久av一区| 福利91精品一区二区三区| 99re6这里只有精品视频在线观看| 91视频免费看| 欧美一区二区在线免费观看| 久久亚洲精精品中文字幕早川悠里| 国产精品视频在线看| 亚洲图片欧美综合| 国产一区二区三区在线观看免费 | 色婷婷精品大在线视频| 777欧美精品| 国产欧美在线观看一区| 亚洲自拍与偷拍| 国产麻豆日韩欧美久久| 91网站最新网址| 欧美电影免费观看高清完整版 | 91麻豆福利精品推荐| 69久久99精品久久久久婷婷| 久久久久国产成人精品亚洲午夜| 亚洲精品国产a久久久久久| 蜜臀av一级做a爰片久久| 成人手机电影网| 欧美一级精品大片| 中文字幕一区av| 久久91精品久久久久久秒播| 色偷偷久久人人79超碰人人澡| 日韩欧美久久久| 亚洲色图第一区| 国模娜娜一区二区三区| 欧美中文字幕一二三区视频| 久久九九全国免费| 五月婷婷激情综合| 国产成人av电影在线播放| 欧美高清视频一二三区| 亚洲欧洲美洲综合色网| 韩国三级中文字幕hd久久精品| 91久久精品一区二区三| 国产日韩av一区二区| 日韩精品视频网| 日本国产一区二区| 国产精品无码永久免费888| 免费久久精品视频| 欧美在线视频不卡| 国产精品区一区二区三| 另类调教123区| 欧美精品日日鲁夜夜添| 亚洲精品乱码久久久久久日本蜜臀| 国产精品一区在线观看你懂的| 宅男噜噜噜66一区二区66| 亚洲免费av网站| www.激情成人| 国产日韩欧美在线一区| 国内精品嫩模私拍在线| 日韩亚洲欧美在线观看| 亚洲第一福利一区| 91国产成人在线| 亚洲欧美日韩国产综合| 成人精品gif动图一区| 久久嫩草精品久久久久| 精品中文字幕一区二区| 日韩一区二区三区av| 首页国产欧美久久| 欧美日韩一级视频| 亚洲国产裸拍裸体视频在线观看乱了| 成人国产电影网| 中文字幕乱码亚洲精品一区| 国产精品一区二区久久不卡| ww久久中文字幕| 国产精品一区一区三区| 久久综合网色—综合色88| 激情伊人五月天久久综合| 久久综合一区二区|