最近的点对(线性一维情况)算法
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)。
【讨论】:
以上是关于最近的点对(线性一维情况)算法的主要内容,如果未能解决你的问题,请参考以下文章