由于时间仓促,就简略写一下,详细解释见代码。
一,编译环境:eclipse
二,实现语言:java
三,实现的基本情况:
1, 根据用户指定输入的n个点,和点的坐标范围上限maxN,
用Random.nextInt(maxN)来随机生成n个点
2,利用分治法来实现
3,利用排序(升序)来排序
四,具体步骤:
(1)当用户输入的点的个数为小于0或者非整数时抛出异常
(2)当用户输入的点的个数为0和1个时提示最小要输入的点的个数
(3)当用户输入的点的个数为2或者3时,直接用蛮力法解决
即,用两点之间的距离去比较
(4)当用户输入的点的个数大于3时,则使用分治法去实现,
以中间值为一条线L:分为左右两个数组,
求出左数组最小对的值d1
求出右数组最小对的值d2
d1和d2比较得出更小的值dmin
这里还没结束,考虑左右各一个点的最小值情况:
若有,必在以线L为中心,宽度为2dmin的矩形上(内),最多不超过8个点,求出 其最小值dmin2,
把dmin1和dmin2比较,即可得出
五,时间
预排序:O(nlgn)
设T(n):每个递归步骤的运行时间
总:T'(n) = T(n)+O(nlgn)
故:
n>3时, T(n) = 2(T/2)+0(n);
n <=3时,T(n) = O(l);
所以:
T(n) = O(nlgn);
T'(n) = O(nlgn);