平面最近点对的经典做法就是分治。所有点先按x再按y排序,然后取中间位置的点,利用其x坐标值将点划分成左右两部分,分别求出两侧的最近点对(设其距离为δ),然后合并。参看下面的图片(来自guyulongcs的专栏,http://blog.csdn.net/guyulongcs/article/detai...
分类:
其他好文 时间:
2015-04-20 11:03:40
阅读次数:
152
早上起来头有点疼,突然就想到能不能用kd树解平面最近点对问题,就找了道题试了一下,结果可以,虽然效率不高,但还是AC了~题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1007题目要求平面上最近点对间距离的一半。思路如下:先建立一棵树,所有点插入树中,之...
分类:
其他好文 时间:
2015-04-15 10:51:24
阅读次数:
367
题意:
给平面上的n个点,求两点间的最短距离。
分析:
分治法,保存点用vector会tle...
代码:
//poj 3714
//sep9
#include
#include
#include
using namespace std;
const double INF=1e50;
struct P
{
double x,y;
int type;
}p[240000],b[2...
分类:
其他好文 时间:
2015-03-09 19:06:29
阅读次数:
174
题目大意:给定平面上的一个点集,求这个点集所能组成的周长最小的三角形
与平面最近点对一个道理- - 这个题也是分治做法
做法如下:
1.记录全局答案ans
2.将所有点按照x值排序
3.定义Solve(l,r)为处理[l,r]区间内的最小三角形
4.对于每层Solve(l,r),将当前区间分成左右两部分,分别递归处理
5.两侧的最小三角形都以处理完毕,现在我们要处理的就是两区间之间的...
分类:
其他好文 时间:
2015-01-26 22:58:42
阅读次数:
271
题目大意:给出平面上一些点,问这些点组成的最小周长三角形的周长是多少。
思路:与平面最近点对类似的思想,先按照x值排序,通过全局目前搜到的最优解来缩小分治之后需要暴力枚举的范围。具体来说,递归的终止条件是需要处理的点数小于一定数量,就在这些点中暴力枚举来更新答案。这个值经过测定,在这个题中20左右为最快的。具体怎么算我也不知道。。
之后每处理一段区间,先递归处理左右区间来更新答案,弄出...
分类:
其他好文 时间:
2015-01-15 22:13:24
阅读次数:
195
题目大意:给出两个集合的点,问这两个集合之间最近的点对的距离是多少。
思路:先要知道平面最近点对的分治算法,剩下的就简单了,只需要在更新答案的时候判断一下两个点是否属于两个集合就可以了。
分治算法总是十分神奇的。
对于平面最近点对,首先按照x坐标排序,然后递归进行分治,每次分治时,先获得分治得到的结果,然后按照这个结果来计算本区间。由于我们只需要计算答案小于这个结果的点对就行了,其中...
分类:
其他好文 时间:
2015-01-13 17:50:30
阅读次数:
116
摘要:
网上有很多关于分治方法求二维平面上最近点对的讨论,但是没有完整的可运行代码,本文主要对于该问题介绍一完整的可运行代码,
供有兴趣者参考。...
分类:
编程语言 时间:
2014-10-13 16:29:49
阅读次数:
378
HDU 1007 求平面最近点对距离的一半#include #include #include
#include #include using namespace std;const double eps = 1e-7;const int MAXN =
100010;const double INF...
分类:
其他好文 时间:
2014-06-05 16:30:22
阅读次数:
235
平面最近点对,指平面中距离最近的两点。本文详细介绍求解平面最近点对的nlogn分治算法。...
分类:
其他好文 时间:
2014-05-09 14:57:34
阅读次数:
225