• 大小: 657KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-24
  • 语言: 其他
  • 标签: AP  聚类算法  C++  

资源简介

给出了AP聚类算法的实现代码,并给出了一个对二维坐标点进行聚类的实际例子的聚类结果。

资源截图

代码片段和文件信息

// APCluster.cpp : Defines the entry point for the console application.
//

#include “stdafx.h“
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;

//用于聚类
struct HFStructCluster
{
int nID;
int nType; //类别
map mapDim; //向量
bool operator == (const HFStructCluster& s1) const //用于比较相等的函数,如find
{
return (nID == s1.nID);
}
};

//三元组结构体,保存三个数据一组的记录
struct HFStructTriple
{
int nSrcID;
int nDstID;
float fValue;
HFStructTriple()
{
nSrcID = 0;
nDstID = 0;
fValue = 0.0f;
}
HFStructTriple(int nIDsint nIDdfloat fV)
{
nSrcID = nIDs;
nDstID = nIDd;
fValue = fV;
}
bool operator == (const HFStructTriple& t1) const //用于find
{
return (nSrcID == t1.nSrcID && nDstID == t1.nDstID);
}
};

//结构体,保存十字链表
struct HFStructList
{
int nID;
list listID;
HFStructList()
{
nID = 0;
}
HFStructList(int nIDValue)
{
nID = nIDValue;
}
bool operator == (const HFStructList& s1) const
{
return (nID == s1.nID);
}

bool operator()(const HFStructList& s1const HFStructList& s2) const //
{
if(s1.nID <= s2.nID) //由小到大排序
{
return true;
}
else
{
return false;
}
}
bool operator<(const HFStructList& s1) const //
{
return (nID <= s1.nID);
}
};

//计算两点之间的欧式距离
bool computeEuclidDistance(map& mapPremap& mapAftfloat& dDist)
{
map::iterator itMapPreitMapAft;
dDist = 0;
itMapPre=mapPre.begin();
itMapAft=mapAft.begin();
while((itMapPre!=mapPre.end()) && (itMapAft!=mapAft.end()))
{
if(itMapPre->first == itMapAft->first)
{
dDist += (itMapPre->second - itMapAft->second) * (itMapPre->second - itMapAft->second);
++itMapPre;
++itMapAft;
}
else if(itMapPre->first < itMapAft->first)
{
dDist += (itMapPre->second) * (itMapPre->second);
++itMapPre;
}
else 
{
dDist += (itMapAft->second) * (itMapAft->second);
++itMapAft;
}
}
while(itMapPre!=mapPre.end())
{
dDist += (itMapPre->second) * (itMapPre->second);
++itMapPre;
}
while(itMapAft!=mapAft.end())
{
dDist += (itMapAft->second) * (itMapAft->second);
++itMapAft;
}

return true;
}

//计算数据对象之间的两两之间的距离
bool ComputeSimilarity(list& listStrClusterlist& listSim)
{
list::iterator itPreitAft;
HFStructTriple strTriple;
int i = 0;
for(itPre=listStrCluster.begin(); itPre!=listStrCluster.end(); ++itPre)
{
cout<<“第:“<<++i<<“个ID=“<nID< strTriple.nSrcID = itPre->nID;
itAft = itPre;
for(++itAft; itAft!=listStrCluster.end(); ++itAft)
{
strTriple.nDstID = itAft->nID;
float dDist = 0;
if(!computeEuclidDistance(itPre->mapDimitAft->mapDimdDist))
{
cout<<“计算数据对象之间的距离出错“< return false;
}

strTriple.fValue = -dDist; //

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2014-02-10 17:08  APCluster\
     目录           0  2014-02-10 17:08  APCluster\APCluster\
     文件       20033  2014-02-10 17:02  APCluster\APCluster\APCluster.cpp
     文件        4522  2014-02-10 16:51  APCluster\APCluster\APCluster.vcproj
     文件        1421  2014-02-10 17:08  APCluster\APCluster\APCluster.vcproj.lenovo-THINK.lenovo.user
     文件        1314  2014-02-10 16:51  APCluster\APCluster\ReadMe.txt
     文件         296  2014-02-10 16:51  APCluster\APCluster\stdafx.cpp
     文件         320  2014-02-10 16:51  APCluster\APCluster\stdafx.h
     文件         765  2014-02-10 16:51  APCluster\APCluster\targetver.h
     文件     2984960  2014-02-10 17:08  APCluster\APCluster.ncb
     文件         893  2014-02-10 16:51  APCluster\APCluster.sln
     文件        8704  2014-02-10 17:08  APCluster\APCluster.suo
     文件          88  2014-01-25 16:07  APCluster\AP_example.txt
     文件          70  2014-02-10 17:07  APCluster\cluster_AP.txt
     文件         339  2014-02-10 17:08  APCluster\说明.txt

评论

共有 条评论