c语言写的数据挖掘的层次聚类算法(新手版)

自己写的c语言写的数据挖掘的层次聚类算法,只用于学习交流,请勿转载!!!!

# include<stdio.h>

# include<math.h>

main(){

int num,i,j,t,clear=0,place,count,numb;     //Cnum  //clear变量用于消除合并后的前一个集合书中第144页的第(3)步,count表示目前聚类个数,Cnum表示需要的聚类个数

float distance[50][50];                //distance[m][n]中,m表示第m个数,n表示第n个数,总体表示n与m的距离

int data[50],cluster[50][50],min;

printf(“请输入数据项的个数:”);

scanf(“%d”,&num);

for(i=0;i<num;i++){

printf(“请输入第%d个数据:”,i+1);

scanf(“%d”,&data[i]);

}

/*printf(“请输入需要聚类的个数:”);

scanf(“%d”,&Cnum);*///用于限定聚类个数的,日后再来搭建

for(i=0;i<num;i++)

cluster[i][0]=data[i];

for(i=0;i<num-1;i++){

for(j=0;j<num-(i+1);j++)

distance[i][j]=sqrt(pow((cluster[i][0]-cluster[j+i+1][0]),2));

}                                                                                          //这里以上是第一次聚类,每个元素作为一类,并计算距离

//在这里我发现不需要运用结构体,用二维数组就可以了的cluster[m][n]m表示第几个元素初始每一行只有一个元素,后面再慢慢累加上去

count=num;

printf(“距离为:\n”);

for(i=0;i<num-1;i++){                                //输出距离

printf(“其余元素与第%d个距离为:”,i+1);

for(j=0;j<num-1;j++)

if(distance[i][j]>=0)

printf(“%3.2f “,distance[i][j]);

putchar(‘\n’);

}              //这里以后开始层次聚类的核心,需要添加循环

for(t=0;t<num-1;t++){

numb=0;

min=distance[t][0];

place=0;

for(i=1;i<num-1;i++){

if(min>distance[t][i]&&distance[t][i]>=0){

min=distance[t][i];

place=i;

}

}

printf(“第一行的最小值为:%d位置为%d\n”,min,place+1);

while(cluster[t+place+1][numb]>=0)

numb++;

for(i=0;i<num;i++){

if(cluster[t][i]>=0)

cluster[t+place+1][numb++]=cluster[t][i];

}        //合并有点问题

clear++;

count–;

for(i=clear;i<num;i++){

for(j=0;j<num;j++)

if(cluster[i][j]>=0)

printf(“%d “,cluster[i][j]);

putchar(‘\n’);

}

printf(“目前聚类个数为:%d\n”,count);

}

    getchar();//暂停用

}

    原文作者:聚类算法
    原文地址: https://blog.csdn.net/tycht/article/details/51437142
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞