最近点对_分治算法
O(nlgn)思路:对所有点先按x不减排序,
二分x,得到点集S1,点集S2,通过递归求得S1,S2的最小点对距离d1,d2;D=min{d1,d2};
合并S1,S2:找到在S1,S2划分线左右距离为D的所有点,按y不减(不增也可以)排序
循环每个点找它后面6个点的最小距离;
最后即求得最小点对距离。
若要求得点对坐标,在求值是保存点的坐标即可。
最近点对还有随机算法 时间复杂度O(n)。
以上摘自 ---------- http://www.cnblogs.com/sleeper-qp/archive/2011/11/08/2241004.html
题目连接: POJ 3714
题目大意:给你一堆点,这些点分为两个类型,让你求相隔最近的不同类型的两个点的距离
O(nlgn)思路:对所有点先按x不减排序,
二分x,得到点集S1,点集S2,通过递归求得S1,S2的最小点对距离d1,d2;D=min{d1,d2};
合并S1,S2:找到在S1,S2划分线左右距离为D的所有点,按y不减(不增也可以)排序
循环每个点找它后面6个点的最小距离;
最后即求得最小点对距离。
若要求得点对坐标,在求值是保存点的坐标即可。
最近点对还有随机算法 时间复杂度O(n)。
以上摘自 ---------- http://www.cnblogs.com/sleeper-qp/archive/2011/11/08/2241004.html
题目连接: POJ 3714
题目大意:给你一堆点,这些点分为两个类型,让你求相隔最近的不同类型的两个点的距离
// POJ 3714 Raid -- 点对最小距离 + 分治法
// 关键是 坐标应该用double