【问题标题】:algorithm to create bounding rectangles for 2D points为二维点创建边界矩形的算法
【发布时间】:2014-08-13 20:20:56
【问题描述】:

输入是一系列点坐标 (x0,y0),(x1,y1) .... (xn,yn)(n 不是很大,比如说 ~ 1000)。我们需要创建一些矩形作为这些点的边界框。无需寻找全局最优解。唯一的要求是如果两点之间的欧几里得距离小于 R,它们应该在同一个边界矩形中。我已经搜索了一段时间,这似乎是一个聚类问题,K-means 方法可能是一个有用的方法。 但是,输入点坐标有时并没有特定的模式。因此,可能无法在 K-mean 中设置特定的 K。我想知道是否有任何算法或方法可以解决这个问题?

【问题讨论】:

    标签: algorithm cluster-analysis data-mining k-means


    【解决方案1】:

    唯一的要求是如果两点之间的欧式距离小于R,它们应该在同一个边界矩形内

    这是在R高度处单链接层次聚类切割的定义

    请注意,这可能会产生重叠的矩形。

    要了解更快、更高效的方法,请查看 R*-trees 的批量加载策略,例如 sort-tile-recursive。它不会满足您上面的“唯一”要求,但会产生平衡良好、不重叠的矩形。

    K-means 显然不适合您的要求。

    【讨论】:

      【解决方案2】:

      只有 1000 分,我会做以下事情:

      1) 计算出所有点对之间的差异。如果一对的距离小于R,则需要进入同一个边框,所以用http://en.wikipedia.org/wiki/Disjoint-set_data_structure记录一下。

      2) 对于来自不相交集数据结构的每个子集,计算其中点的最小和最大坐标,并使用它为该子集中的点创建一个边界框。

      如果你有更多的积分或者担心效率,你会想让阶段(1)更有效率。一种简单的方法是按照 x 坐标的顺序遍历这些点,只在最近看到的点的左侧保留最多 R 个点,并使用平衡树结构从这些点中找到最多 R 个以上的点或低于最近看到的点,然后计算到最近看到的点的距离。更进一步的方法是创建一种空间数据结构,以便更高效地查找彼此距离为 R 的对。

      请注意,对于某些输入,您只会得到一个巨大的边界框,因为您有很长的点链,而对于其他一些输入,您会在边界框内获得边界框,例如,如果您的点在同心圆中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-08-23
        • 1970-01-01
        • 2012-06-17
        • 1970-01-01
        • 2012-01-09
        • 1970-01-01
        • 1970-01-01
        • 2013-04-25
        相关资源
        最近更新 更多