生成聚类中心:最大最小距离算法
来源:互联网 发布:热力地图制作软件 编辑:程序博客网 时间:2024/05/19 13:57
样本:x0(0 0), x1(3 8), x2(2 2), x3(1 1), x4(5 3), x5(4 8), x6(6 3), x7(5 4), x8(6 4), x9(7 5)
一个粗糙的最大最小距离算法代码
#include <bits/stdc++.h>using namespace std;const double INF=9999999999999;const int MAXN=1e6+10;double D;//Distance limit between different Cluster Centersint sum;//The number of Patternbool isCenter[MAXN];//save Cluster Centerstypedef struct Pattern{ double x,y; int id;}Pattern;Pattern node[MAXN];typedef struct Clusters{ vector <Pattern> Cluster_Center; vector <int> Cluster[MAXN];public: bool empty(){ return Cluster_Center.empty()?1:0; } void push(Pattern x){ Cluster_Center.push_back(x); return ; } double dis(Pattern x){ double mindis=INF,tempdis; int len=Cluster_Center.size(); for(int i=0;i<len;i++){ tempdis=sqrt((x.x-Cluster_Center[i].x)*(x.x-Cluster_Center[i].x)+(x.y-Cluster_Center[i].y)*(x.y-Cluster_Center[i].y)); mindis=min(mindis,tempdis); } return mindis; } void showCenter(){ int len=Cluster_Center.size(); cout<<"计算聚类中心完毕,展示所有聚类中心:"<<endl; for(int i=0;i<len;i++){ cout<<'x'<<Cluster_Center[i].id<<' '<<Cluster_Center[i].x<<' '<<Cluster_Center[i].y<<endl; } } void order(Pattern a[]){ int len=Cluster_Center.size(); for(int i=0;i<len;i++){ Cluster[i].push_back(Cluster_Center[i].id); } for(int i=0;i<sum;i++){ if(!isCenter[i]){ double tempdis,minndis=INF; int belong=-1; for(int j=0;j<len;j++){ tempdis=sqrt((a[i].x-Cluster_Center[j].x)*(a[i].x-Cluster_Center[j].x)+(a[i].y-Cluster_Center[j].y)*(a[i].y-Cluster_Center[j].y)); if(tempdis<minndis){ minndis=tempdis; belong=j; } } Cluster[belong].push_back(i); } } } void showCluster(){ int len=Cluster_Center.size(); cout<<"计算聚类,展示所有聚类:"<<endl; for(int i=0;i<len;i++){ int llen=Cluster[i].size(); cout<<"第"<<i<<"类样本集为:"<<endl; for(int j=0;j<llen;j++){ cout<<'x'<<Cluster[i][j]<<' '; } cout<<endl; } }}Clusters;Clusters clu;void ini(){ memset(isCenter,0,sizeof(isCenter)); node[0]={0,0,0};node[1]={3,8,1};node[2]={2,2,2};node[3]={1,1,3};node[4]={4,2,4};node[5]={4,8,5};node[6]={6,3,6};node[7]={5,4,7};node[8]={6,4,8};node[9]={7,5,9}; D=3; sum=10; clu.Cluster_Center.clear();}bool Find_Cluster_Center(){ if(clu.empty()){ isCenter[0]=1; clu.push(node[0]); }else{ double tempdis; double maxndis=-INF; int newCenter=-1; for(int i=0;i<sum;i++){ if(!isCenter[i]){ tempdis=clu.dis(node[i]); if(tempdis>maxndis){ newCenter=i; maxndis=tempdis; } } } if(maxndis<D) return 0; isCenter[newCenter]=1; clu.push(node[newCenter]); } return 1;}int main(){ ini(); while(1){ if(!Find_Cluster_Center()) break; } clu.showCenter(); clu.order(node); clu.showCluster();}
且并不太可能找时间优化他
阅读全文
0 0
- 生成聚类中心:最大最小距离算法
- 聚类算法-最大最小距离算法(实例+代码)
- 聚类算法——最大最小距离算法
- 最大最小距离算法(K-MEANS K-medoids )聚类算法的结合运用
- 最大最小距离算法——模式识别
- 最大最小距离算法(Max-Min-diatance)
- [BZOJ2177][最小/最大(曼哈顿距离)生成树]曼哈顿最小生成树
- 曼哈顿距离最小生成树与莫队算法
- 曼哈顿距离最小生成树与莫队算法
- 曼哈顿距离最小生成树与莫队算法
- 曼哈顿距离最小生成树与莫队算法
- 曼哈顿距离最小生成树与莫队算法
- 最小编辑距离算法
- 基于最大最小距离的分类数目上限K确定的聚类方法
- 曼哈顿距离最小生成树
- 曼哈顿距离最小生成树
- 曼哈顿距离最小生成树
- 几种聚类算法的结合运用(K-MEANS K-medoids 最大最小距离算法)
- 剑指offer:(27)分解让复杂问题简单化 :二叉搜索树与双链表
- morphia向数据库中存入对象时,会默认添加className的问题
- EL隐式对象
- Android与js交互
- js中元素节点
- 生成聚类中心:最大最小距离算法
- LeetCode-171. Excel Sheet Column Number (Java)
- BCB project options->application-> load icon 按钮灰显解决办法
- Bat批处理文件技巧记录
- 机器学习通俗入门-朴素贝叶斯分类器
- Expression表达式资料
- MSSQL:vb数据查询
- iOS 多线程下NSOperation、NSBlockOperation、NSInvocationOperation、NSOperationQueue的使用
- [Linux]运输层的端口