• 大小: 1.02MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-08-28
  • 语言: C/C++
  • 标签: 聚类算法  

资源简介

用C语言写的K-means聚类算法,有助于初学者的学习使用

资源截图

代码片段和文件信息

#include 
#include 
using namespace std;

int main()
{
       int point[10][3]={{000}{535}{754}{545}{386}{487}{646}{113}{634}{224}};
       int z[10][3]={0};
   
       z[0][0]=point[0][0];
   z[0][1]=point[0][1];
   z[0][2]=point[0][2];
//依次算出与第一个点z的距离,找出最大距离点,确定第二个z
   double temp_distance=0.0;
   int count=0;//记录z所在点的序列
   int z_num=0;
       for(int item=0;item<10;item++)
       {
double distance=sqrt((point[item][0]-z[0][0])*(point[item][0]-z[0][0])+(point[item][1]-z[0][1])*(point[item][1]-z[0][1])+(point[item][2]-z[0][2])*(point[item][2]-z[0][2]));
   if(distance>temp_distance)
           {
  temp_distance=distance;
                  count=item;
           }
       }
   z_num++;
//确定记录第二个z
       z[1][0]=point[count][0];
   z[1][1]=point[count][1];
   z[1][2]=point[count][2];
z_num++;
       
//计算阈值q
   double q=0.5*sqrt((z[1][0]-z[0][0])*(z[1][0]-z[0][0])+(z[1][1]-z[0][1])*(z[1][1]-z[0][1])+(z[1][2]-z[0][2])*(z[1][2]-z[0][2]));

   double w_distance[10];
       do
       {
        //以下为聚类中心到每一个样本的最小距离
   for(int i=0;i<10;i++)
   {
   double min_distance=sqrt((point[i][0]-z[0][0])*(point[i][0]-z[0][0])+(point[i][1]-z[0][1])*(point[i][1]-z[0][1])+(point[i][2]-z[0][2])*(point[i][2]-z[0][2]));
   for(int j=1;j<=z_num;j++)
               {
   double distance=sqrt((point[i][0]-z[j][0])*(point[i][0]-z[j][0])+(point[i][1]-z[j][1])*(point[i][1]-z[j][1])+(point[i][2]-z[j][2])*(point[i][2]-z[j][2]));
   if(distance    min_distance=distance;
               }
   w_distance[i]=min_distance;
   }
   //以下为取这些最小距离中的最大值
   temp_distance=w_distance[0];
   for(int temp=1;temp<10;temp++)
   {
   if(w_distance[temp]>temp_distance)
   {
   temp_distance=w_distance[temp];
   count=temp;
   }
   }
   if(temp_distance>q)
   {
z[z_num][0]=point[count][0];  //最大值对应的样本作为聚类中心
z[z_num][1]=point[count][1];
z[z_num][2]=point[count][2];
z_num++;
   }
   else break;
   }while(true);

       //以下为输出所分得的类别
       cout<<“由最大最小算法进行归类\n“;
   for(item=0;item    cout<<“(“<
       //以下为最近距离算法
       cout<<“归完类后由最近距离得最后结果\n“;
   for(int i=0;i<10;i++)
       {   
   int k=0;
   double min_distance=sqrt((point[i][0]-z[0][0])*(point[i][0]-z[0][0])+(point[i][1]-z[0][1])*(point[i][1]-z[0][1])+(point[i][2]-z[0][2])*(point[i][2]-z[0][2]));
           for(int j=0;j           {
   double distance=sqrt((point[i][0]-z[j][0])*(point[i][0]-z[j][0])+(point[i][1]-z[j][1])*(point[i][1]-z[j][1])+(point[i][2]-z[j][2])*(point[i][2]-z[j][2]));
   if(distance    {
   min_distance=distance;
   count=i;
   k=j;
   }
   }
   cout<<“(“<

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-08-31 19:31  MaxMinDis1\
     目录           0  2018-08-31 19:28  MaxMinDis1\MaxMinDis\
     目录           0  2018-08-31 19:27  MaxMinDis1\MaxMinDis\Debug\
     文件      524348  2012-05-04 22:29  MaxMinDis1\MaxMinDis\Debug\MaxMinDis.exe
     文件      778116  2012-05-04 22:29  MaxMinDis1\MaxMinDis\Debug\MaxMinDis.ilk
     文件      151673  2012-05-04 22:29  MaxMinDis1\MaxMinDis\Debug\MaxMinDis.obj
     文件     2009712  2012-04-26 12:13  MaxMinDis1\MaxMinDis\Debug\MaxMinDis.pch
     文件     1074176  2012-05-04 22:29  MaxMinDis1\MaxMinDis\Debug\MaxMinDis.pdb
     文件       74752  2018-08-31 19:28  MaxMinDis1\MaxMinDis\Debug\vc60.idb
     文件      110592  2012-05-04 22:29  MaxMinDis1\MaxMinDis\Debug\vc60.pdb
     文件        3167  2012-05-04 22:29  MaxMinDis1\MaxMinDis\MaxMinDis.cpp
     文件        3437  2018-08-31 19:27  MaxMinDis1\MaxMinDis\MaxMinDis.dsp
     文件         524  2018-08-31 19:28  MaxMinDis1\MaxMinDis\MaxMinDis.dsw
     文件       50176  2018-08-31 19:28  MaxMinDis1\MaxMinDis\MaxMinDis.ncb
     文件       48640  2018-08-31 19:28  MaxMinDis1\MaxMinDis\MaxMinDis.opt
     文件         252  2018-08-31 19:27  MaxMinDis1\MaxMinDis\MaxMinDis.plg
     文件       15737  2018-08-31 15:06  MaxMinDis1\Microsoft Office Word 文档.docx

评论

共有 条评论