博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
几何问题中的分治法
阅读量:3960 次
发布时间:2019-05-24

本文共 1868 字,大约阅读时间需要 6 分钟。

几何问题中的分治法

1.最近对问题

问题描述:

设p1=(x1,y1),p2=(x2,y2),…,pn=(xn,yn)一共n个点构成点集S,最近点对问题就是找出集合中距离最近的两个点,严格来说最近点对可能多于一个,但我们简单起见只找出一对即可。

算法思路:

(1)划分:将集合S分成两个子集S1和S2,根据平衡子问题原则,每个子集中大约有n/2个点,设集合S的最近点对是pi与pj(1<=i,j<=n),则会出现三种情况。

①pi在S1中,pj在S1中
②pi在S2中,pj在S2中
③pi在S1中,pj在S2中
(2)划分①②可以递归,划分③比较麻烦
(3)合并,比较三种情况取最小值返回即可
下面讨论情况③:
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

代码:

import org.junit.Test;public class AVL {
//最近点对问题 @Test public void Test() {
Point p1 = new Point(); p1.setX(0.1); p1.setY(0.2); Point p2 = new Point(); p2.setX(0.4); p2.setY(0.3); Point p3 = new Point(); p3.setX(0.2); p3.setY(0.1); Point points[]=new Point[]{
p1,p2,p3}; Point[] points_help = new Point[points.length]; for(int i=0;i
=temp.x) j--; points[i]=points[j]; while(i
<=temp.x) i++; points[j]=points[i]; } else{
while(i
=temp.y) j--; points[i]=points[j]; while(i
<=temp.y) i++; points[j]=points[i]; } } points[i]=temp; return i; } void sort(Point points[],int left,int right,int condtion){
if(left
=left;i--){
if(points[mid].x-points[i].x<=d) points_help[index++]=points[i]; else break; } for(int j=mid+1;j<=right;j++){
if(points[j].x-points[mid].x<=d){
points_help[index++]=points[j]; } else break; } //现在已经收集好了我们将其按照y轴的方向从小到大排序 sort(points_help,0,index-1,1); for(int i=0;i

输出:

在这里插入图片描述

2.凸包问题

问题描述:设p1=(x1,y1),p2=(x2,y2),…,pn=(xn,yn)是平面上n个点构成的集合S,凸包问题是为集合S构造最小凸多边形。

在这里插入图片描述
在这里插入图片描述
由于最近比较忙碌,就先介绍到这吧,后续有空会补上代码

转载地址:http://rplzi.baihongyu.com/

你可能感兴趣的文章
jsp 2.0标记文件
查看>>
Hibernate中Criteria的完整用法
查看>>
sql jsp
查看>>
spring beans beanfactory applicationcontext
查看>>
使用ORM工具进行数据访问
查看>>
使用ORM工具进行数据访问
查看>>
编译与部署Eclipse+Tomcat+MySQL+Liferay4.1.2
查看>>
POJ3728,The merchant(倍增LCA+分治)
查看>>
2019 ICPC Malaysia National,E. Optimal Slots(01背包变形)
查看>>
洛谷P1638 逛画展(双向队列)
查看>>
POJ2892,Tunnel Warfare(线段树维护连续区间)
查看>>
POJ3468,A Simple Problem with Integers(线段树-区间查询-区间更新)
查看>>
杭电ACM——6463(思维)
查看>>
杭电ACM——1061,Rightmost Digit(思维)
查看>>
杭电ACM——1087,Super Jumping! Jumping! Jumping!(DP)
查看>>
杭电ACM——fatmouse's speed(DP)
查看>>
杭电ACM——毛毛虫(DP)
查看>>
杭电ACM——humble numbers(DP)
查看>>
杭电ACM——6467,简单数学题(思维)
查看>>
杭电ACM——天上掉馅饼(DP)
查看>>