We are given an array of n points in the plane, and the problem is to find out the closest pair of points in the array. This problem arises in a number of applications.For example, in air-traffic control, you may want to monitor
planes that come too close together, since this may indicate a possible collision. Recall the following formula for distance between two points p and q.
The Brute force solution is O(n^2), compute the distance between each pair and return the smallest. We can calculate the smallest distance in O(nLogn) time using Divide and Conquer strategy. In this post, a O(n x (Logn)^2) approach is discussed. We will be discussing a O(nLogn) approach in a separate post.
Algorithm
Following are the detailed steps of a O(n (Logn)^2) algortihm.
Input:An array of n pointsP[]
Output:The smallest distance between two points in the given array.
As a pre-processing step, input array is sorted according to x coordinates.
1)Find the middle point in the sorted array, we can takeP[n/2]as middle point.
2)Divide the given array in two halves. The first subarray contains points from P[0] to P[n/2]. The second subarray contains points from P[n/2+1] to P[n-1].
3)Recursively find the smallest distances in both subarrays. Let the distances be dl and dr. Find the minimum of dl and dr. Let the minimum be d.
4)From above 3 steps, we have an upper bound d of minimum distance. Now we need to consider the pairs such that one point in pair is from left half and other is from right half. Consider the vertical line passing through passing through P[n/2] and find all points whose x coordinate is closer than d to the middle vertical line. Build an array strip[] of all such points.
5)Sort the array strip[] according to y coordinates. This step is O(nLogn). It can be optimized to O(n) by recursively sorting and merging.
6)Find the smallest distance in strip[]. This is tricky. From first look, it seems to be a O(n^2) step, but it is actually O(n). It can be proved geometrically that for every point in strip, we only need to check at most 7 points after it (note that strip is sorted according to Y coordinate). Seethisfor more analysis.
7)Finally return the minimum of d and distance calculated in above step (step 6)
相关推荐
【标题】"2022最新版:GEEKS V1.0.10主题:在线学习市场WordPress主题.rar" 涉及的核心知识点主要集中在WordPress主题开发与在线教育平台的构建上。WordPress是一个非常流行的开源内容管理系统(CMS),被广泛用于...
- "interview-practice":暗示这个项目可以帮助开发者准备技术面试,因为面试通常会考察候选人的算法理解和实现能力。 【压缩包子文件的文件名称列表】:geeks_algorithms-master 这个列表表明压缩包包含了一个名...
"Geeks2TheRescue:使用MERN的Web App,旨在连接雄心勃勃的开发人员" 这个标题揭示了项目的核心——一个基于MERN技术栈的Web应用程序,其目的是为了建立一个社区,将充满激情和抱负的开发者联系起来。MERN是一个流行...
《C++解题指南:Geeks-for-Geeks问题解决方案详解》 在编程的世界里,Geeks-for-Geeks(GFG)是一个备受推崇的学习平台,尤其对于初学者和有经验的开发者来说,这里提供了丰富的算法和数据结构题目。本资料包"geeks...
带有React JS的WebApp样板 要求: 确保您使用的是节点版本10 安装软件包: $ npm install 创建一个.env文件: $ cp .env.example .env 开始编码! 以及具有实时重新加载功能的webpack开发服务器(适用于Windows...
夏季极客提交 这个Web应用程序被配制成在Innnovaccer SDE实习分配的一部分,使用的NodeJS,MongoDB的,NodeMailer的电子邮件和Nexmo的手机信息,根据。 预习 报到表格 结帐电子邮件 使用的技术 ...
《Geeks3D Furmark:全面解析OpenGL显卡基准测试工具》 Geeks3D Furmark,这是一款专为评测显卡性能而设计的OpenGL基准测试工具,它由知名技术团队Geeks3D开发,旨在为用户提供准确且全面的显卡性能评估。V1.17.1的...
面试时,面试官可能会从多个方面考察候选人的 Java 技能,包括基础语法、类、对象、变量、字符串处理、多线程、面向对象概念、异常处理、集合框架等。 1. **Java 基础**: - Java 是一种静态类型的、解释型的、跨...
欢迎来到4Geeks学院 <\编码时间>内容关于。创始人。团队。奖项。校友关于4Geeks是一家大公司,感觉就像一家小公司;每个人都可以访问,我们喜欢与人接触,我们相信量身定制的教育,而不会离开您的工作,并且100%...
:sparkles: gloomhaven-geeks :sparkles: 这是一个使用Git作为的网站。 它是在不到一分钟的时间内使用创建的。 您可以像这样,或探索一些变体。 如何不同: :artist_palette: 看 :pencil: 内容管理系统 :gear: 静态...
标题中的“geeks文档.doc”和描述中的“geek极客们都用什么神器,这篇文章给了你答案。”都指向了一个主题:探讨极客们使用的高效工具,即“神器”。标签中的“geek 极客 神器”进一步确认了这个话题,我们将重点...
首先,从标题和描述中,我们可以了解到这是关于一个在线IT资源平台geeksforgeeks上关于C++编程语言的学习内容和经验分享。从“标题”中我们得知这是一个专门讨论C++的资源集合,而“描述”部分则是一个学习者的个人...
极客换极客 Geeks-For-Geeks 实习文章 使用 scapy 嗅探数据包 - 使用 Javascript 和 DOM 创建棋盘模式 - 如何将链接从一个 iframe 加载到另一个 iframe -
### Ubuntu Linux for Non-Geeks:重要知识点概览 #### 一、书籍基本信息与版权说明 - **书名**:《Ubuntu Linux for Non-Geeks》 - **作者**:Rickford Grant - **出版社**:No Starch Press - **出版地**:美国...
本题的难度并不在最短路径本身这个算法,而是在于堆的操作: 1 使用双重指针操作堆的节点,可以省去直接复制操作堆节点,提高效率,并且这才是有效操作动态地址数据的方法,不用双重指针,我思考了下,觉得更加不好...
Hardware Hacking Projects for Geeks 英文chm 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
### Ubuntu for Non-Geeks (Fourth Edition):一本无痛高效指南 #### 书籍概览 《Ubuntu for Non-Geeks》(第四版)是一本针对Ubuntu新手的实用指南,旨在帮助那些对技术不太熟悉的用户轻松掌握Ubuntu操作系统。...
标题中的“Hash Map for geeks_hashmap_Geeks_源码”显然指的是一个关于哈希映射(HashMap)的学习资源,特别针对极客和普通程序员。哈希映射是一种数据结构,它允许我们以O(1)的时间复杂度进行插入、删除和查找操作...
Mac OS X For Unix Geeks 2003
《Geeks3D PhysX FluidMark v1.3.1:显卡性能的深度剖析》 在计算机硬件领域,显卡扮演着至关重要的角色,它不仅负责图形渲染,还承担了复杂的物理运算任务。为了评估显卡的性能,专业工具的运用必不可少。其中,...