牛客网-数据结构笔试题目(六)-最近点对问题求解思路

题意

我们先来看下题意吧,题意很简单,在一个平面当中分布着n个点。现在我们知道这n个点的坐标,要求找出这n个点当中距离最近的两个点的间距。
图片
我们来分析一下问题,会发现一个矛盾之处。矛盾的地方在于如果我们要求出每两个点之间的距离,那么复杂度一定是,因为n个点取两个点一个有种可能。如果存在更快的算法,那么势必我们不能求出所有点对之间的距离,但如果我们连所有的距离都没有枚举过,如何可以判断我们找到的一定是对的呢?

分治法

如果我们仔细思考一下,会发现这个问题和排序其实非常类似。因为我们在排序的时候,表面上来看每两个点之间都存在大小关系,我们要排序似乎也要获得这些关系。但实际上,我们都知道,无论是快速排序还是归并排序都可以做到的时间内完成排序。
无论是快速排序还是归并排序,本质上都是利用的分治法。那么这道题是否也可以使用分治法求解呢?
答案当然是可以的,既然是使用分治法,那么我们首先要做的就是拆分,将整个的数据拆成两个部分,使用递归分别完成两个部分,然后再合并得到完整的结果。在这个问题当中,我们要拆分数据非常简单࿰

猜你喜欢

转载自blog.csdn.net/m0_50230964/article/details/114832047