⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kmean.cpp

📁 文件中包含多种模式识别常用的算法
💻 CPP
字号:
#include <stdio.h>
#include <math.h>

typedef struct sample
{
	float x;
	float y;
} SAMPLE;

float distance(SAMPLE a,SAMPLE b)
{
	float d;
	float a1=a.x, a2=a.y;
	float b1=b.x, b2=b.y;
	d=sqrt((a1-b1)*(a1-b1)+(a2-b2)*(a2-b2));
	return d;
}

void main()
{
	SAMPLE point[20]={{0,0},{1,0},{0,1},{1,1},{2,1},{1,2},{2,2},{3,2},{6,6},{7,6},{8,6},{6,7},{7,7},{8,7},{9,7},{7,8},{8,8},{9,8},{8,9},{9,9}};
	SAMPLE center[2];
	SAMPLE newcenter[2];
	int i;
	int flag[20];
	int N[2];

	center[0]=point[0];
	center[1]=point[9];

	/*for(i=0;i<20;i++)
	  printf("(%f,%f)\t",point[i].x,point[i].y);
	printf("\n(%f,%f)\t",center[0].x,center[0].y);
	printf("\n(%f,%f)\t",center[1].x,center[1].y);*/

	while(1)
	{
		N[0]=0; N[1]=0;
		for(i=0;i<20;i++)
		{
			if(distance(point[i],center[0])<=distance(point[i],center[1])) { flag[i]=0; N[0]++; }
			else { flag[i]=1; N[1]++; }
		}

		newcenter[0].x=0; newcenter[0].y=0;
		newcenter[1].x=0; newcenter[1].y=0;
		for(i=0;i<20;i++)
		{
			if(flag[i]==0)
			{
				newcenter[0].x=newcenter[0].x+point[i].x;
				newcenter[0].y=newcenter[0].y+point[i].y;
			}
			else
			{
				newcenter[1].x=newcenter[1].x+point[i].x;
				newcenter[1].y=newcenter[1].y+point[i].y;
			}
		}
		newcenter[0].x=newcenter[0].x/N[0];
		newcenter[0].y=newcenter[0].y/N[0];
		newcenter[1].x=newcenter[1].x/N[1];
		newcenter[1].y=newcenter[1].y/N[1];

		if((newcenter[0].x==center[0].x)&&(newcenter[0].y==center[0].y)&&(newcenter[1].x==center[1].x)&&(newcenter[1].y==center[1].y))
			break;

		center[0]=newcenter[0];
		center[1]=newcenter[1];

		/*printf("center[0]=(%f,%f)\n",center[0].x,center[0].y);
		printf("center[1]=(%f,%f)\n",center[1].x,center[1].y);*/
	}

	printf("the first class:\n");
	for(i=0;i<20;i++)
	{
		if(flag[i]==0)
			printf("point[%d]=(%f,%f)\n",i,point[i].x,point[i].y);
	}
	printf("the class center is (%f,%f)\n",center[0].x,center[0].y);
	printf("\n");
	printf("the secend class:\n");
	for(i=0;i<20;i++)
	{
		if(flag[i]==1)
			printf("point[%d]=(%f,%f)\n",i,point[i].x,point[i].y);
	}
	printf("the class center is (%f,%f)\n",center[1].x,center[1].y);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -