dbscan算法c语言实现,用C++实现DBSCAN聚类算法

本文介绍了如何使用C++实现DBSCAN聚类算法,包括数据点类`DataPoint`的定义以及`ClusterAnalysis`类的实现,用于处理数据集、计算距离和执行聚类操作。详细展示了类的成员函数和算法流程,最后通过一个简单的调用示例说明了算法的使用。
摘要由CSDN通过智能技术生成

这几天由于工作需要,对DBSCAN聚类算法进行了C++的实现。时间复杂度O(n^2),主要花在算每个点领域内的点上。算法很简单,现共享大家参考,也希望有更多交流。

数据点类型描述如下:

复制代码 代码如下:

#include

using namespace std;

const int DIME_NUM=2;        //数据维度为2,全局常量

//数据点类型

class DataPoint

{

private:

unsigned long dpID;                //数据点ID

double dimension[DIME_NUM];        //维度数据

long clusterId;                    //所属聚类ID

bool isKey;                        //是否核心对象

bool visited;                    //是否已访问

vector arrivalPoints;    //领域数据点id列表

public:

DataPoint();                                                    //默认构造函数

DataPoint(unsigned long dpID,double* dimension , bool isKey);    //构造函数

unsigned long GetDpId();                //GetDpId方法

void SetDpId(unsigned long dpID);        //SetDpId方法

double* GetDimension();                    //GetDimension方法

void SetDimension(double* dimension);    //SetDimension方法

bool IsKey();                            //GetIsKey方法

void SetKey(bool isKey);                //SetKey方法

bool isVisited();                        //GetIsVisited方法

void SetVisited(bool visited);            //SetIsVisited方法

long GetClusterId();                    //GetClusterId方法

void SetClusterId(long classId);        //SetClusterId方法

vector& GetArrivalPoints();    //GetArrivalPoints方法

};

这是实现:

复制代码 代码如下:

#include "DataPoint.h"

//默认构造函数

DataPoint::DataPoint()

{

}

//构造函数

DataPoint::DataPoint(unsigned long dpID,double* dimension , bool isKey):isKey(isKey),dpID(dpID)

{

//传递每维的维度数据

for(int i=0; i

{

this->dimension[i]=dimension[i];

}

}

//设置维度数据

void DataPoint::SetDimension(double* dimension)

{

for(int i=0; i

{

this->dimension[i]=dimension[i];

}

}

//获取维度数据

double* DataPoint::GetDimension()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值