【发布时间】:2014-03-03 16:52:06
【问题描述】:
给定一组 xy 坐标,我如何选择 n 个点,使这 n 个点彼此相距最远?
一种低效的方法可能不适用于大型数据集,如下所示(从 1000 个点中找出最远的 20 个点):
xy <- cbind(rnorm(1000),rnorm(1000))
n <- 20
bestavg <- 0
bestSet <- NA
for (i in 1:1000){
subset <- xy[sample(1:nrow(xy),n),]
avg <- mean(dist(subset))
if (avg > bestavg) {
bestavg <- avg
bestSet <- subset
}
}
【问题讨论】:
-
假设你有 10 个点,你想找到 4 个点的子集,比如说,最大化 6 个点间距离之和的点?
-
是的,我认为这会得到我正在寻找的结果......
-
组合数学对你不利的是 1000 个点和 20 个子集。计算所有 1000x1000 距离如何,删除两个最近点,重新计算距离,重复 980 次。比迭代超过 10^50 个组合更快。
-
我同意@Spacedman。但也许这是在Computer Science SO 上提出的更好的问题?一个有效的算法可能并不特定于 R,并且那里的用户可能已经知道最好的算法。
-
您在每一步都重新计算距离矩阵。为什么?只需根据该步骤的剩余点对其进行子集化即可。