• 大小: 8KB
    文件类型: .cpp
    金币: 2
    下载: 0 次
    发布日期: 2024-02-04
  • 语言: C/C++
  • 标签: 算法  

资源简介

聚类算法,使用欧氏距离实现,可通过文件对算法功能进行测试

资源截图

代码片段和文件信息

#include
using namespace std;
#include
#include
#include
#include
#include
#define LONG 15
typedef struct LNode{  //结点的元素 
string name;
double year2006;
double year2010;
double year2007;
int power;  //用于聚类后存储属于哪一簇 
struct LNode *next;
}LNode*list;
//链表初始化
int InitList(list &a){
a = new LNode;
a->next=NULL;
return 1;

//后插法创建 链表
int creat(list &aint n){
a = new LNode;
a->next = NULL;
list t=a;
list p;
ifstream inFill(“测试数据.txt“); 
// cout<<“输入各个结点的数据:“< for(int i=0;i p = new LNode;
inFill>>p->name;
inFill>>p->year2006;
inFill>>p->year2007;
inFill>>p->year2010;
p->power = 0;
p->next =NULL;
t->next = p;
t=p;

}
//链表输出函数 
int output(list &aint n){
list p=a;
p=p->next;
ofstream outFill(“测试结果.txt“);
for(int i=0;i outFill<name
<year2006
<year2007
<year2010< p=p->next;
}
p=a;
for(int i=0;i p=p->next;
cout<name
<year2006
<year2007
<year2010<
}

}

//数据规范化[01]
int standard(list &aint n){
//判定各个元素的最大值最小值 
list p1 = a;
p1=p1->next;
double max2006max2010max2007min2006min2007min2010;
max2006 = p1->year2006;
min2006 = p1->year2006;
  max2007 = p1->year2007;
  min2007 = p1->year2007;
max2010 = p1->year2010;
min2010 = p1->year2010;
  //求最大值和最小值 
for(int i=0;i      p1=p1->next;
    if(max2006year2006) max2006 = p1->year2006;
      if(max2007year2007) max2007 = p1->year2007;
    if(max2010year2010) max2010 = p1->year2010;
  if(min2006>p1->year2006) min2006 = p1->year2006;
  if(min2007>p1->year2007) min2007 = p1->year2007;
  if(min2010>p1->year2010) min2010 = p1->year2010;    
   }
   //输出最大值最小值 
//规范化  并将规范后的节点数据插入到表头之后 
       p1=a;
       p1=p1->next;
     for(int i=0;i      p1->year2006 = (p1->year2006-min2006)/(max2006-min2006);
      p1->year2007 = (p1->year2007-min2007)/(max2007-min2007);
      p1->year2010 = (p1->year2010-min2010)/(max2010-min2010);
      p1=p1->next;
   }
}
//聚类算法 
int Kmeans(list aint n){
list p=a;
double a1[3]b1[3]c1[3];           //存储三个种子的值 
double t1t2t3;                    //存储结点与种子产生的结果 
double s[LONG][3];                    //存储第一次聚类结果的矩阵
// srand((unsigned)time(NULL));
    ofstream outFill(“测试结果.txt“);
p=p->next;                       
for(int i=0;i  if(p->name==“日本“){
    a1[0]=p->year2006;
    b1[0]=p->year2007;
    c1[0]=p->year2010;
        } 
else if(p->name==“巴林“) {
a1[1]=p->year2006;
    b1[1]=p->year2007;
    c1[1]=p->year2010;
}
else if(p->name==“泰国“){
a1[2]=p->year2006;
    b1[2]=p->year2007;
    c1[2]=p->year2010;
}  
    p=p->next;
}
//计算十五个球队与三个种子的相异度
p=a;   p=p->next;
 for(int i=0;i   for(int j=0;j<3;j++)
  s

评论

共有 条评论