【问题标题】:In the closest pair of points divide and conquer algorithm, what is the significance of sorting the "strip" by the points' y values?在最近的点对分治算法中,按点的y值对“条”进行排序有什么意义?
【发布时间】:2013-11-15 21:15:50
【问题描述】:

我相信我非常清楚地了解该算法,除了您通过查看分区来查看是否有任何接近的点并创建一个条带,其中条带内的点是候选点的步骤。

但随后该算法规定按它们的 y 坐标对点进行排序,然后检查条带中的其他点以查找是否存在比先前找到的距离更小的距离。这基本上听起来像是你在地带内的蛮力。

例如,以下是算法简介所述:

所以您似乎只是将每个点与所有其他点进行比较以找到最接近的点?那为什么要按y值排序呢?你已经把它们按 x 排序了,为什么不用蛮力呢?

【问题讨论】:

    标签: algorithm recursion coordinates divide-and-conquer closest-points


    【解决方案1】:

    您不会蛮力比较Y' 中的所有点,而只能与p 旁边的点进行比较。如果那个已经太远了,你可以停下来,因为所有其他点都会更远。如果最后一个仍在您的搜索距离内,您只会继续评估下一个最近的邻居。

    文本在我们很快就会看到部分进行了解释。

    排序在这里是一种优化,允许您在支付一次O(n log n) 的排序成本后迭代O(1) 中的最近邻居。

    【讨论】:

    • 但是为什么我们要遍历排序后的 y,而不是排序后的 x?垂直发展能给我们带来什么好处?
    • 因为利用x 中的排序已经在第1 步中通过Y' 的构造完成。您首先对x 进行排序并消除所有非x 邻居,然后对y 中的x 邻居(Y')进行排序并消除所有非y 邻居。只留下真正的邻居。
    猜你喜欢
    • 2018-10-02
    • 2012-07-04
    • 1970-01-01
    • 2016-06-07
    • 2011-12-07
    • 2018-11-22
    • 2010-09-20
    • 2013-05-16
    相关资源
    最近更新 更多