实验目的:
求解最近点对算法,分析该算法的性能。
问题定义
随机生成点的横、纵坐标值(0-9999),点数可以设置100个,1000个,10000个。
输出格式:最近点对为( XX , XX )与( YY , YY )以及点对之间的距离。
实验思想
使用分治法求解最近点对问题。事先用O(n log n)时间对x坐标进行排序,使得所有的点是按x坐标从小到大排好序的(x坐标相同时y坐标小的排前),那么我们只要取下标小的n/2个点属于左边的点集PL,取下标大的n/2个点属于右边的点集PR,即用O(1)时间就可以将规模为n的问题分解为两个规模为n/2的、同类型的子问题。分割完毕之后就可以采用分治法,分别求出PL和PR中的最近点对。
该算法的主程序如下:
1. 读入n个点的坐标,这n个点的x坐标和y坐标分别放在X,Y两个数组中,然后进行下述预处理。
2. 对X数组中的n个x坐标值按从小到大的次序进行排序,排序过程中保持x坐标和y坐标的对应关系:若X[i]与X[j]对换位置,则Y[i]与Y[j]也做相同的对换。另外,若两个点的x坐标相同,则y坐标值小的排前。X数组排好之后就固定了,以后不再改变,以便在O(1)时间对其实现分拆。
3. 将数组IND初始化为:IND[i]=i(i=1,2,┉,n)。数组IND即是用来保持x坐标和y坐标的对应关系的机制, IND[i]记录的是其y<