最近点对问题的实现

时间:2021-04-09 05:37:49
【文件属性】:

文件名称:最近点对问题的实现

文件大小:4KB

文件格式:CPP

更新时间:2021-04-09 05:37:49

最近点对问题

使用分治的思想,将最近点对问题转化为左右和横跨左右的点对的问题,由左右两个子问题返回左右两边最短的点对距离,设为d,则横跨左右的点对只需要考虑距离分割线水平距离小于d的点,而且对于每个横跨左右的点得搜索遍历不需要考虑所有其他的点,而只需要考虑最多6个节点(因为由鸽巢原理知,假如d*2d区域里有多于6个点时,左右两个子问题的最近点对将小于d)。同时利用分割的思想为以y坐标排序的数组中,不需要每次都排序,而只需要使用它的父问题传入的y排序数组切割掉一部分即可,而最初的排序源于一次快排。算法一共递归logn次,每层计算量都为n,而主函数调用两次快排,综合起来,整个算法的时间复杂度为O(nlgn)。


网友评论