最近的点对(线性一维情况)算法

Posted

技术标签:

【中文标题】最近的点对(线性一维情况)算法【英文标题】:Closest pair of points (linear 1-D case) algorithm 【发布时间】:2014-12-05 01:22:16 【问题描述】:

我正在辅导一个学生,她的一项任务是描述一个 O(nlogn) 算法,用于在一维情况下最近的一对点。但限制是她不允许使用分而治之的方法。我从几年前用户发布的一个问题中理解了二维案例。如果有人想查看它,我会链接它:对于 2-D 案例(平面)-"Closest pair of points" algorithm。

但是,对于一维情况,我只能想到一个解决方案,即检查线上的每个点并将其与最接近的点进行比较。但是这个解决方案不是 O(nlogn),因为检查每个点将花费与 n 成正比的时间,并且每个点的比较将花费与 2n 成正比的时间。如果不使用分而治之的方法,我不确定 log(n) 的来源。

由于某种原因,我无法提出解决方案。任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

提示:如果点从左到右排序,你会怎么做,复杂度是多少?先排序点的复杂度是多少?

【讨论】:

【参考方案2】:

在我看来可以:

    按顺序对位置进行排序 - O(n log n) 找出有序位置之间的差异 - O(n) 找到最小的差异 - O(n) 最小的差异定义了两个最近的点。

总体结果将是 O(n log n)。

【讨论】:

以上是关于最近的点对(线性一维情况)算法的主要内容,如果未能解决你的问题,请参考以下文章

最近的点对算法

SVM 与 LR的异同

最近的点对算法

5.线性回归算法

平面最近点对的算法实现

线性代数和numpy