Ex 6_12 凸多边形的最优三角剖分..._第六次作业

假设顶点的总数为n,从0到n-1. 从序号为0的顶点开始以逆时针方向排序,对于

令子问题A[i,j]为包含顶点i,i+1, . . . j的凸多边形的最小三角剖分代价,dist(i,j)为顶点i到顶点j的距离。对于子问题A[i,j],考虑边e(i,j)最终会在某个三角形内,为了找出这个三角形,计算i到j之间的每个顶点k与i和j围成的三角形的对角线的和的最小值即为A[i,j],找出对角线和的最小值所对应的k,再继续查找A[i,k],A[k,j],直到多边形不能再划分为止,因此的到递推式

package org.xiu68.ch06.ex6;
public class Ex6_12 {
public static Point[] ps1,ps2;
//凸多边形的最优三角形剖分,求所有对角线之和的最小值
public static void main(String[] args) {
// TODO Auto-generated method stub
/*
最小三角剖分代价为:8.47213595499958
三角形划分方式为:
Point:0,Point:4,Point:1
Point:1,Point:4,Point:2
*/
ps1=new Point[]{
new Point(2,0),
new Point(0,2),
new Point(0,4),
new Point(4,4),
new Point(4,2)
};
int[][] arr1=new int[ps1.length][ps1.length];
minTriangle(ps1,arr1); //8.47213595499958
System.out.println("三角形划分方式为:");
divide(arr1,0,ps1.length-1);
/*
最小三角剖分代价为:11.21110255092798
三角形划分方式为:
Point:0,Point:5,Point:1
Point:1,Point:5,Point:3
*/
System.out.println();
ps2=new Point[]{
new Point(0,2),
new Point(10,4),
new Point(12,4),
new Point(13,2),
new Point(12,0),
new Point(10,0)
};
int[][] arr2=new int[ps2.length][ps2.length];
minTriangle(ps2,arr2); //11.21110255092798
System.out.println("三角形划分方式为:");
divide(arr2,0,ps2.length-1);
}
//B中存放三角形的第三个顶点
public static void minTriangle(Point[] ps,int[][] B){
double[][] A=new double[ps.length][ps.length]; //子问题A[i][j]的最优三角剖分代价
for(int i=0;i<A.length;i++)
for(int j=0;j<A[i].length;j++){
A[i][j]=0;
B[i][j]=0;
}
for(int s=4;s<=ps.length;s++){ //包含s个顶点的多边形的最优剖分代价
for(int i=0;i<ps.length-s+1;i++){ //包含s个顶点的多边形的开始顶点,以逆时针方向前进
int j=i+s-1; //包含s个顶点的多边形的结束顶点
A[i][j]=Double.MAX_VALUE;
double temp=A[i][j];
//t为i和j的相对顶点,从i的后一个顶点开始,结束顶点为j的前一个顶点
for(int t=i+1;t<=j-1;t++){
if(t==i+1){ //t为i的后一个顶点
temp=dist(ps,t,j)+A[t][j];
}
else if(t==j-1){ //t为j的前一个顶点
temp=dist(ps,i,t)+A[i][t];
}else{ //t处于i的后一个顶点之后,j的前一个顶点之前
temp=dist(ps,i,t)+dist(ps,j,t)+A[i][t]+A[t][j];
}
if(A[i][j]>temp){
A[i][j]=temp;
B[i][j]=t;
}
}//
}//
}//
System.out.println("最小三角剖分代价为:"+A[0][ps.length-1]);
}
public static void divide(int[][] B,int i,int j){
if(B[i][j]!=0){
System.out.println("Point:"+i+",Point:"+j+",Point:"+B[i][j]);
divide(B,i,B[i][j]);
divide(B,B[i][j],j);
}
}
//顶点序号i和j之间的距离
public static double dist(Point[] ps, int i,int j){
double m1=Math.pow(ps[i].x-ps[j].x, 2);
double m2=Math.pow(ps[i].y-ps[j].y, 2);
return Math.sqrt(m1+m2);
}
}
class Point{
public double x;
public double y;
public Point(double x,double y){
this.x=x;
this.y=y;
}
}
Ex 6_12 凸多边形的最优三角剖分..._第六次作业的更多相关文章
- Ex 6_20 最优二叉搜索树..._第六次作业
假设关键字的总数为n,用c[i,j]表示第i个关键字到第j个关键字的最优二叉查找树的代价,我们的目标是求c[0,n-1].要求c[i,j],首先要从第i个关键字到第j个关键字中选一个出来作为根结点,选 ...
- Ex 6_9 某个字符串处理语言提供了一个将字符串一分为二的基本操作..._第六次作业
设字符串的长度为n,整型数组arr[0. . .n-1]的第一个数和最后一个数为开始点与结束点的位置,中间的数为拆分点的位置,设cost[i,j]为第i个分割点到第j个分割点的最小代价,两个分割点之间 ...
- Ex 6_4 判断序列是否由合法单词组成..._第六次作业
设字符串为s,字符串中字符的个数为n,vi[i]表示前i+1个字符是否能组成有效的单词vi[i]=true表示能组成有效的单词,vi[i]=false表示不能组成有效的单词,在每个字符串前加一个空格, ...
- 【UVA1331】关于最优三角剖分
最近在练习DP专题,学会了很多表示方法和转换方法,今天做最优三角剖分的时候发现脑子卡了,不会表示状态,于是写个博客记录一下. 最优三角剖分的一类题目都是差不多的.给你一个多边形,让你把它分割成若干个三 ...
- (DP) 关于最优三角剖分
https://www.cnblogs.com/Konjakmoyu/p/4905563.html 这个人写的好 最优三角剖分的核心思想: 确定决策顺序. 有时一个解可以用许多决策顺序得出, 这时候我 ...
- Hadoop作业性能指标及參数调优实例 (三)Hadoop作业性能參数调优方法
作者: Shu, Alison Hadoop作业性能调优的两种场景: 一.用户观察到作业性能差,主动寻求帮助. (一)eBayEagle作业性能分析器 1. Hadoop作业性能异常指标 2. Had ...
- Hadoop作业性能指标及參数调优实例 (二)Hadoop作业性能调优7个建议
作者:Shu, Alison Hadoop作业性能调优的两种场景: 一.用户观察到作业性能差,主动寻求帮助. (一)eBayEagle作业性能分析器 1. Hadoop作业性能异常指标 2. Hado ...
- ArcGIS for Desktop入门教程_第六章_用ArcMap制作地图 - ArcGIS知乎-新一代ArcGIS问答社区
原文:ArcGIS for Desktop入门教程_第六章_用ArcMap制作地图 - ArcGIS知乎-新一代ArcGIS问答社区 1 用ArcMap制作地图 作为ArcGIS for Deskto ...
- MySQL调优系列_日志分析
前言 本篇主要总结一下MySQL数据库的几种日志,用于日常维护过程中问题解决和性能优化等,稍显基础,日常积累之用. 文章的部分内容会将MySQL数据库和SQL Server数据库部分内容做一个对比,非 ...
随机推荐
- CRT&EXCRT 中国剩余定理及其扩展
前言: 中国剩余定理又名孙子定理.因孙子二字歧义,常以段子形式广泛流传. 中国剩余定理并不是很好理解,我也理解了很多次. CRT 中国剩余定理 中国剩余定理,就是一个解同余方程组的算法. 求满足n个条 ...
- Spring + Shiro 项目 + HttpSessionListener 【调用springService问题】&【Session失效问题】
功能描述: 当用户退出(主动)或者关闭浏览器(session超时)的时候,利用本次登录Ip更新上次登录IP.有人可能要问,你在用户登录的时候记录不就行了.可是我有两个字段,一个为本次登录IP,另外一个 ...
- 2018.7中石油个人赛第4场(D-Transit Tree Path)-最短路算法
6690: Transit Tree Path 时间限制: 1 Sec 内存限制: 128 MB提交: 472 解决: 132[提交] [状态] [讨论版] [命题人:admin] 题目描述 Yo ...
- Hadoop生态圈-Oozie实战之调度shell脚本
Hadoop生态圈-Oozie实战之调度shell脚本 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客展示案例:使用Oozie调度Shell脚本. 1>.解压官方案例 ...
- SQL记录-PLSQL基本语法与数据类型
PL/SQL基本语法 PL/SQL是一种块结构的语言,这意味着PL/SQL程序被划分和编写代码的逻辑块.每块由三个子部分组成: S.N. 段和说明 1 声明 此部分开头使用关键字DECLARE.它是一 ...
- 缓存方案 通过SqlDependency实现Cache和Database的同步
对于一个真正的企业级的应用来说,Caching肯定是一个不得不考虑的因素,合理.有效地利用Caching对于增强应用的Performance(减少对基于Persistent storage的IO操作) ...
- python学习笔记8-邮件模块
我们在开发程序的时候,有时候需要开发一些自动化的任务,执行完之后,将结果自动的发送一份邮件,python发送邮件使用smtplib模块,是一个标准包,直接import导入使用即可,代码如下: impo ...
- Android studio 自动导入(全部)包 import
http://blog.csdn.net/buaaroid/article/details/44979629 1 Android studio 只有import单个包的快捷键:Alt+Enter.没有 ...
- Win Server 2008 R2 IIS 默认只能添加一个 443 HTTPS 端口
问题: 解决方案: 方法一: 然后在:C:\Windows\system32\inetsrv\config\applicationHost.config 找到 对应网站 <binding pro ...
- js 原生 ajax
//js ajax function Ajax(url,type,data,comFun,sucFun,errFun) { //1.创建XMLHttpRequest对象 var xmlHttpRequ ...