0
点赞
收藏
分享

微信扫一扫

一维k-means聚两类(c语言实现)


准确的来讲我这段程序算不得真正的k-means算法,这是我在数学建模过程中中针对一维数据聚合为两类的情况下,针对改进的版本!要想学习真正的k-means聚类请不要误入歧途!

#include <iostream>//一维k-means聚两类
#include<stdio.h>
#define n 10
void dist(int b, int s, float* p, float* q);//距离和
void sort(int* p, int size);//顺序冒泡排序
int main()
{
	FILE* fpr, * fpw;
	fopen_s(&fpr, "1.txt", "r");
	fopen_s(&fpw, "_1.txt", "w");
	float a[n], min, g[2*n], d[n], y[2];
	int i, j, b = n - 1, s = 0, z = 0;
	for (i = 0; i < n; i++)
		fscanf_s(fpr, "%d", a + i);
	for (i = 0; b > s; i += 2)
	{
		dist(b, s, a, y);
		d[z++] = y[0] + y[1];
		g[i] = y[0];
		g[i + 1] = y[1];
		b--;
		s++;
	}
	min = d[0];
	for (i = 1, z = 0; i < z; i++)
		if (d[i] < min)
		{
			min = d[i];
			z = i;
		}
	fprintf(fpw, "%f %f %f\n", min, g[z], g[z]);
	fclose(fpr);
	fclose(fpw);
	return 0;
}
void sort(int* p, int size)//顺序冒泡排序
{
	int i, b[10], j, k;
	for (i = 0; i < size - 1; i++)
		for (j = i + 1; j < size; j++)
			if (p[i] > p[j])
			{
				k = p[i];
				p[i] = p[j];
				p[j] = k;
			}
}
void dist(int b, int s, float* p, float* q)//距离和
{
	q[0] = q[1] = 0;
	for (int i = 0; i < n; i++)
	{
		if (abs(p[i] - p[b]) < abs(p[i] - p[s]))
			q[1] += abs(p[i] - p[b]);
		else
			q[0] += abs(p[i] - p[s]);
	}
}


举报

相关推荐

0 条评论