【发布时间】:2010-10-14 21:16:42
【问题描述】:
给定: 给定二维平面上的一组 N 个点(x 和 y 坐标),以及每个点对应的一组 N 个半径。我们将一个点的圆盘称为以该点为中心并以其半径为中心的圆盘。
问题:对点进行聚类。点簇使得每个点要么落入簇中至少一个其他点的圆盘内,要么簇中的至少一个其他点落入其圆盘内。单个点的集群不算作集群。
我需要一种算法来有效地计算这个(最好不要求助于复杂的空间散列技术,如 kd-trees)。我可以满足 O(N^2) 的运行时间,但绝对不会超过 O(N^3)。我觉得这应该很简单,但我开始意识到我的聚类条件的非互惠性质。
本质上,我是在找填C函数原型:
int cluster_points(
size_t n,
point_t *pt, // length n list of points
double *radius, // length n list of radii for each point
int *cluster, // length n list of cluster indexes; -1 if not clustered
size_t *ncluster // number of clusters (number of distinct non -1 entries in cluster)
);
这不是家庭作业。我需要它作为矩阵算法的一部分,用于对复数进行聚类。
【问题讨论】: