資源簡介
聚類算法,使用歐氏距離實現,可通過文件對算法功能進行測試
代碼片段和文件信息
#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
- 上一篇:編譯原理實驗報告+代碼+使用說明
- 下一篇:wifi無線稱重機畢業設計
評論
共有 條評論