【问题标题】:Partition 2D points into N regions each with K neighboring points [duplicate]将 2D 点划分为 N 个区域,每个区域具有 K 个相邻点
【发布时间】:2018-05-07 14:27:12
【问题描述】:

如果一个人在 2D 空间中有一组点,是否有一种算法可以将这些点分成 N 个“区域”,每个“区域”包含 K 个相邻点?

例如,假设将这 20 个点聚类为 4 组,每组 5 个点。一个令人满意的解决方案可能如下所示:

动机:我正在尝试优化visualization that loads lots of images into the browser。我计划在页面加载时加载非常低分辨率的图像,然后在用户放大该区域时提高该区域中图像的分辨率。当然我需要量化空间,所以如果用户直接滚动到上面示例的中间,我必须为 4 组中的每一个获取高分辨率图像。

console.log('stackoverflow wants code for posts with codepen links')

【问题讨论】:

  • k-means 聚类,其中 k = 你的N / 你的K
  • 但这并不能保证每个集群都有 K 个成员而无需任何修改
  • 感谢@Anony-Mousse——这些线程很棒!

标签: algorithm cluster-analysis hierarchical-clustering


【解决方案1】:

算法可以是这样的:

- get a triangulation of the points (for example: Delaunay Triangulation): D
- get a planar graph from D: G
- Then partition G into connected subgraphs with equal size k

最后一步this solution 很简单(来自理论计算机科学网站):

计算图的恒定度生成树 T,将其作为根,现在贪婪地找到大小为 r 的子树,提取它们,然后重复。当然,如果没有恒度生成树,那么上面的星号例子说明这个算法可能会失败。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-21
    • 2018-10-15
    • 1970-01-01
    • 1970-01-01
    • 2022-06-22
    • 2012-01-06
    • 2023-03-09
    相关资源
    最近更新 更多