algorithm - 如何使用 HashMap 查找一个点属于哪个区域?

标签 algorithm hash geometry cluster-analysis

假设我们有一个二维空间,通过 Voronoi Tessellation 分成多个簇:

enter image description here

我们有聚类轮廓、中点。在这样的空间中给定一个点(x,y 坐标)如何获取它的哈希值,以便我们可以确定它属于哪个集群?

我知道我们可以通过添加层来使我们的集群形成二叉树,并使用树搜索计算点所属的位置。我也知道我们可以将每个空间点(假设它是隐蔽的)映射到一个集群并获得 O(1) 存储数据负载。但我寻求一种使用无序 HashMap 样式从给定点获取集群的方法。如何(从算法上)做这样的事情?

最佳答案

构建kd-tree在 Voronoi 站点(单元格“中心”)上,您将在 O(NlogN) 时间内搜索最近的站点。

请注意,由于 Voronoi 图属性,点和最近的站点都属于同一个单元格

另一个选项 - 构建 trapezoid decomposition细胞(也许,更复杂的方式)

关于algorithm - 如何使用 HashMap 查找一个点属于哪个区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43517652/

相关文章:

arrays - 如何在 $C$ 不相交的排序数组的并集中找到第 $k$ 最小的项目?

arrays - 为什么我的第一个哈希值在 Perl 中消失了?

c++ - 通过 boost 几何从多边形(环)中裁剪多边形(环)的一部分

c++ - 在任意原点调整矩形形状

algorithm - 排序名称和时间复杂度

java - 为什么我的算法返回 stackoverflow 异常?

string - 是否有任何算法可以从字符串集合中找到与字符串最接近的匹配项?

php - 为什么我的password_verify函数与我输入的正确密码不匹配并且知道数据库中的密码是什么

ruby - Array#uniq() 忽略相同的 hash() 值?

typescript - 为什么我不能在 ThreeJS Typescript 项目中创建 Face3