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

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

?? cmean.cpp

?? C-means 算法
?? CPP
字號:
//////////////////////////////////////////////////////////////////////////
//k-mean 聚類創建日期2006年5月22日
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <time.h>
#include <math.h>
long int posnum;
const int M=1000;
const double NUM_MAX=100000000;
const double NUM_MIN=0.00000001;
int knum;
int row;
int *numperclu;//每個簇的個數
//均值聚類數據結構
struct cluster
{
	double *data;
	int dataindex;
	struct cluster *next;
};
typedef struct cluster ccnode;
typedef ccnode *ccLink;
ccLink kcluster;
//讀文件,位置矩陣
double** readdata(char* s)
{
	FILE* fp;
	if ((fp=fopen(s,"rb"))==NULL)
	{
		printf("erro! cannot open file!\n");
		exit(0);
	}
	int i,j;
	double **tpos;
	tpos= (double**)malloc(M*sizeof(double*));
	for ( i=0;i<M;i++)
		tpos[i] = (double*)malloc(M*sizeof(double));
	
	char temp[100]={0};
	char *p = NULL; double x;
	for(i=0;!feof(fp);i++)
	{
		if((fgets(temp,100,fp))==NULL)
			break;
		p = temp;
		j=0;
		while(1)
		{
			x=atof(p);  
			tpos[i][j] = x;
			j++;
			if((p=strchr(p,' '))==NULL)
				break;
			p++;
		}
	}  
	posnum = i ; row = j;
	double **pos;
	pos= (double**)malloc(posnum*sizeof(double*));
	for ( i=0;i<posnum;i++)
	{ 
		pos[i] = (double*)malloc(row*sizeof(double));
		for(j=0;j<row;j++)
			pos[i][j] = tpos[i][j];		
		free(tpos[i]);
	}
	free(tpos); 
	fclose(fp); 
	return pos;
}
void insertcluster(ccLink Head,double *key,int dataindex)
{
	ccLink pointer;
	pointer = Head;
	// Head->data[0]++;
	int i;
	while (pointer->next!=NULL)
		pointer=pointer->next;

	ccLink New;
	New = (ccLink)malloc(sizeof(ccnode));
	pointer->next=New;
	New->data=(double*)malloc(row*sizeof(double));
	for (i=0;i<row;i++)
		New->data[i]=key[i];

	New->dataindex=dataindex;
	New->next=NULL;
}
////////
double dist(double* d1,double *d2)
{
	int i;double distant=0;
	for (i=0;i<row;i++)
		distant=distant+(d1[i]-d2[i])*(d1[i]-d2[i]);
	distant=sqrt(distant);
	return distant;
}
////////
int isexit(double** temp)
{
	int i,j;double distant=0.0;
	for (i=0;i<knum;i++)
	{
		/*  for (j=0;j<row;j++)
		{
			printf("%lf ",temp[i][j]);
			printf("%lf ",kcluster[i].data[j]);
		}  
		*/
		distant=distant+ dist(temp[i],kcluster[i].data);
	}
	printf("%lf\n",distant);
	if (distant<NUM_MIN)
		return 0;
	else
		return 1;
}
 //重新計算均值并賦值
void calmean(ccLink Head)
{
	int i;
	int num=0;
	double *sum=(double*)(malloc(row*sizeof(double)));
	for (i=0;i<row;i++)
		sum[i]=0;
	ccLink pointer;
	pointer=Head->next;
	for (;pointer!=NULL;pointer=pointer->next)
	{
		for (i=0;i<row;i++)
			sum[i]=sum[i]+pointer->data[i];
		num++;
	}
	for (i=0;i<row;i++)
	{
		if (num!=0)
			sum[i]=sum[i]/num;
		else
			sum[i]=0;
		Head->data[i]=sum[i];
	}
	free(sum);
}
////////////////
double** initdata()
{  
	int i,j;
	srand((unsigned)time(NULL));
	double** pos;
	pos = readdata("pos.txt");
	numperclu = (int*)malloc(knum*sizeof(int));
	for (i=0;i<knum;i++)
		numperclu[i]=0;
	int num;
	int bestnum;
	double min=NUM_MAX;
	double distant;
	kcluster=(ccLink)malloc(knum*sizeof(ccnode));
	for (i=0;i<knum;i++)
		kcluster[i].data=(double*)malloc(row*sizeof(double));
	for (i=0;i<knum;i++)
	{
		num=rand()%posnum; 
		for (j=0;j<row;j++)
			kcluster[i].data[j]=pos[num][j];

		kcluster[i].dataindex = 0;
		kcluster[i].next=NULL;
	}
	for (i=0;i<posnum;i++)
	{
		min = NUM_MAX;
		for (j=0;j<knum;j++)
		{
			distant=dist(pos[i],kcluster[j].data);
			if (distant<min)
			{
				min=distant;
				bestnum=j;
			}
		}
		insertcluster(&kcluster[bestnum],pos[i],i);
		numperclu[bestnum]++;//簇內數目加一
	}
	for (i=0;i<knum;i++)
		calmean(&kcluster[i]);
	return pos;
} 
//刪除不在同一個簇內的節點,并查入到最近的簇中
void delandinsercluster(double* data,int bestnum)
{
	int i;
	for (i=0;i<knum;i++)
	{
		ccLink pointer;
		pointer = &kcluster[i];
		ccLink back=pointer;
		pointer=pointer->next;
		for ( ;pointer!=NULL;pointer=pointer->next)
		{
			if (dist(data,pointer->data)<NUM_MIN)
			{
				if (i!=bestnum)
				{
					//查入到bestnum簇中
					insertcluster(&kcluster[bestnum],data,pointer->dataindex);
					numperclu[bestnum]++;//簇內數目加一
					//刪除i簇中的節點,并查入到bestnum簇中
					back->next=pointer->next;
					free(pointer->data);
					free(pointer);
					numperclu[i]--;//簇內數目減一
				}
				break;
			}//end if
			back = pointer;
		}//end for
	}//end for
}
////////////////////
int kmeancluster(double** pos)
{  
	int i,j;
	int bestnum=0;
	double distance=0.0;
	for (i=0;i<posnum;i++)
	{
		double min=NUM_MAX;
		for (j=0;j<knum;j++)
		{
			distance=dist(pos[i],kcluster[j].data);
			if (distance<min)
			{
				min=distance;
				bestnum=j;
			}
		}
		delandinsercluster(pos[i],bestnum);
	}
	double** temp=(double**)malloc(knum*sizeof(double*));
	for (i=0;i<knum;i++)
		temp[i]=(double*)malloc(row*sizeof(double));
	for (i=0;i<knum;i++)
		for (j=0;j<row;j++)
			temp[i][j]=kcluster[i].data[j];//后面的值
	                                                          
	for (i=0;i<knum;i++)
		calmean(&kcluster[i]);
	
	int isstop = isexit(temp);
	for (i=0;i<knum;i++)
		free(temp[i]);
	free(temp);
	return isstop;    
}
/////////////////
void printcluster()
{
	ccLink pointer;
	FILE* fp;
	if ((fp=fopen("out.txt","w"))==NULL)
	{
		printf("error! can't open out file!\n");
		exit(0);
	}

	int i,j;
	for (i=0;i<knum;i++)
	{
		printf("第%d組:數目:%d節點:",i,numperclu[i]);
		fprintf(fp,"%d %d ",i,numperclu[i]);
		for (pointer=kcluster[i].next;pointer!=NULL;
				pointer=pointer->next )
		{
			printf("%d ",pointer->dataindex);
			fprintf(fp,"%d ",pointer->dataindex);
		}
		printf("\n");
		fprintf(fp,"\n");
	}
	fclose(fp);
}
////////////
void freeall()
{
	free(numperclu);
	int i;
	ccLink pointer;
	ccLink tpointer;
	for(i=0;i<knum;i++)
	{
		pointer=&kcluster[i];
		pointer=pointer->next;
		while (pointer!=NULL)
		{
			tpointer=pointer;
			pointer=pointer->next;
			free(tpointer->data);
			free(tpointer);
		}
		free(kcluster[i].data);  
	}

	free(kcluster);
}
//  main
int main()
{
	knum=3;
	int i=0;
	double **pos = initdata();
	int isstop=1;
	while (isstop)
	{
		i++;
		isstop = kmeancluster(pos);
		printf("第%d次迭代\n",i);
	}
	printcluster();
	freeall();
	return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
韩日av一区二区| 中文字幕免费不卡| 婷婷开心激情综合| 色欧美日韩亚洲| 久久久蜜桃精品| 国产精品一区二区男女羞羞无遮挡 | 亚洲欧美另类在线| av不卡免费电影| 亚洲色图一区二区| 色婷婷亚洲综合| 亚洲成av人片一区二区| 成年人网站91| 国产精品久久久久7777按摩| 成人免费毛片高清视频| 国产欧美精品一区二区色综合| 麻豆国产精品一区二区三区| 欧美成人一区二区三区片免费| 亚洲国产一区二区视频| 欧美电视剧免费全集观看| 成人动漫精品一区二区| 亚洲欧美视频在线观看视频| 91九色最新地址| 亚洲1区2区3区视频| 7777精品久久久大香线蕉| 亚洲国产中文字幕| 在线电影国产精品| 人人爽香蕉精品| 国产日韩三级在线| 91在线视频免费观看| 一区二区三区精品久久久| 5566中文字幕一区二区电影| 国产一区二区三区在线观看精品 | 国产精品久久久久影院| 成人动漫在线一区| 亚洲成人激情综合网| 在线成人小视频| 久久精品国产精品青草| 中国av一区二区三区| 欧美午夜一区二区三区 | 成人免费一区二区三区在线观看| 一道本成人在线| 精品一区二区三区欧美| 成人欧美一区二区三区| 国产三级精品在线| 欧美中文字幕久久| 国产在线国偷精品产拍免费yy| 国产精品婷婷午夜在线观看| 欧美天堂一区二区三区| 国产一区亚洲一区| 亚洲欧美福利一区二区| 日韩欧美国产午夜精品| 91免费观看视频| 久久99国产乱子伦精品免费| 亚洲视频免费看| 91麻豆精品国产91久久久更新时间| 国产高清无密码一区二区三区| 亚洲小少妇裸体bbw| 久久一二三国产| 欧美日韩精品一区视频| 国产不卡视频一区二区三区| 日韩经典中文字幕一区| 国产精品久久久久久户外露出| 欧美另类久久久品| 高清不卡一区二区在线| 欧美老年两性高潮| 亚洲激情自拍视频| 欧洲av一区二区嗯嗯嗯啊| 国内偷窥港台综合视频在线播放| 亚洲一区二区视频在线观看| 亚洲国产精品成人综合色在线婷婷 | 色综合久久中文综合久久97| 韩国三级在线一区| 日韩电影免费一区| 亚洲一卡二卡三卡四卡无卡久久| 国产网红主播福利一区二区| 日韩一级片在线播放| 欧美亚洲禁片免费| 色婷婷国产精品综合在线观看| 精彩视频一区二区三区| 香蕉成人伊视频在线观看| 17c精品麻豆一区二区免费| www国产亚洲精品久久麻豆| 欧美一区二区视频在线观看| 欧洲av一区二区嗯嗯嗯啊| 成人激情午夜影院| 青青草原综合久久大伊人精品优势| 国产亚洲精品精华液| 日韩欧美一区二区在线视频| 欧美日韩国产高清一区二区三区 | 亚洲国产高清aⅴ视频| 在线综合视频播放| 欧美日韩久久一区| 91久久一区二区| 91成人在线免费观看| av欧美精品.com| 91蜜桃免费观看视频| 99这里都是精品| 国产不卡免费视频| 99久久精品免费精品国产| 91亚洲国产成人精品一区二三| 91欧美激情一区二区三区成人| 91论坛在线播放| 91成人在线精品| 欧美视频日韩视频| 欧美巨大另类极品videosbest| 色婷婷激情久久| 91视频你懂的| 欧美色综合网站| 欧美一区二区在线播放| 欧美一区二区三区小说| 亚洲成人在线免费| 日韩不卡在线观看日韩不卡视频| 日本欧洲一区二区| 午夜电影久久久| 午夜视黄欧洲亚洲| 久久不见久久见中文字幕免费| 精品中文字幕一区二区| 国产**成人网毛片九色| 91国在线观看| 日韩天堂在线观看| 国产精品看片你懂得| 国产精品三级电影| 国产精品国产三级国产有无不卡 | 99免费精品在线| 成人性生交大合| 粉嫩av一区二区三区| 91麻豆福利精品推荐| 91精品国产综合久久小美女| 久久色中文字幕| 国产精品久久久久久妇女6080| 亚洲午夜精品17c| 另类欧美日韩国产在线| 成年人网站91| 欧美一区二区三区电影| 国产女主播视频一区二区| 一区二区三区高清在线| 日韩和欧美一区二区三区| 国产福利一区二区三区在线视频| 在线免费视频一区二区| 亚洲精品一区二区三区香蕉| 亚洲精品综合在线| 国产在线一区二区综合免费视频| www.成人网.com| 久久影院午夜片一区| 青娱乐精品在线视频| 欧美色图第一页| 1区2区3区欧美| 成人免费毛片aaaaa**| 精品久久久久久久久久久久久久久 | 懂色av一区二区夜夜嗨| 日韩免费看网站| 日韩精品久久久久久| 欧美三级日本三级少妇99| 亚洲三级在线免费| 成人高清在线视频| 欧美激情一区二区三区蜜桃视频| 久久99精品国产麻豆婷婷洗澡| 制服视频三区第一页精品| 亚洲成人激情自拍| 欧美日韩亚洲综合在线 | 日韩三级.com| 午夜精品福利在线| 欧美精选在线播放| 亚洲国产sm捆绑调教视频| 91精品福利视频| 亚洲自拍另类综合| 欧美色综合久久| 爽好久久久欧美精品| 欧美精品一级二级三级| 日韩av成人高清| 日韩欧美成人一区| 国产一区二区三区电影在线观看| 欧美成人aa大片| 国产丶欧美丶日本不卡视频| 久久久综合激的五月天| 国产一区二区精品在线观看| 国产亚洲美州欧州综合国| 北条麻妃一区二区三区| 亚洲欧美日韩国产一区二区三区 | 欧美午夜精品久久久| 伊人开心综合网| 欧美精品色综合| 狠狠色狠狠色合久久伊人| 久久品道一品道久久精品| 国产成人高清视频| 中文字幕在线一区二区三区| 91视频精品在这里| 五月激情六月综合| 欧美电影免费提供在线观看| 国产一区二区三区美女| 国产精品高潮呻吟久久| 欧亚洲嫩模精品一区三区| 日本一区中文字幕| 久久久久9999亚洲精品| 99精品欧美一区二区三区小说 | 一区在线播放视频| 欧美亚洲高清一区| 麻豆91精品91久久久的内涵| 欧美国产一区二区| 在线观看国产精品网站|