计算机算法分析与设计(4)---凸多边形的最优三角划分(含C++代码)

文章目录

  • 一、概述
    • 1.1 概念说明
    • 1.2 与矩阵连乘对应关系
    • 1.3 递归定义
  • 二、代码


一、概述

1.1 概念说明

 1. 用多边形顶点的逆时针序列表示凸多边形,即P={V0, V1, … Vn-1, Vn}表示具有n+1条边的凸多边形。

 2. 若Vi和Vj是多边形上不相邻的两个顶点,则线段ViVj称为多边形的一条弦。

 3. 多边形的三角剖分是将多边形分割成互不相交的三角形。

 4. 由多边形的边和弦组成三角形上的权w(即三边和)。要求确定该凸多边形的一个三角剖分,使得该三角剖分中的所有三角形上权之和最小。

1.2 与矩阵连乘对应关系

 1. 一个矩阵连乘表达式的完全加括号方式相应于一棵完全二叉树,称为表达式的语法树。 例如,完全加括号的6矩阵连乘积((A1(A2A3))(A4(A5A6)))所相应的语法树如图(a)所示。

 2. 凸多边形{V0, V1, … Vn}的三角剖分也可以用语法树表示。例如图 (b)中7顶点的凸多边形的三角剖分可用图 (a)所示的语法树表示。

矩阵Ai对应多边形中的一条边Vi-1 Vi。一条弦ViVj,i<j,对应矩阵连乘积A[i+1: j]。

在这里插入图片描述

1.3 递归定义

 1. 定义t[i][j],1≤i<j≤n为凸子多边形{Vi-1, Vi ,…, Vj}的最优三角剖分所对应的权函数值,即其最优值。

 2. 设退化的多边形即只有一条边{Vi-1, Vi},其权函数值为0,即t[i][i]=0。

 3. 目标:凸(n+1)边形的最优权值为t[1][n]。当i<j 时,凸子多边形至少有3个顶点。

在这里插入图片描述

二、代码

#include <iostream> 
using namespace std;const int N = 7;//凸多边形边数+1
int weight[][N] = { { 0,2,2,3,1,4 },{ 2,0,1,5,2,3 },{ 2,1,0,2,1,4 },{ 3,5,2,0,6,2 },{ 1,2,1,6,0,1 },{ 4,3,4,2,1,0 } };//凸多边形的权int MinWeightTriangulation(int n, int **t, int **s);
void Traceback(int i, int j, int **s);//构造最优解
int Weight(int a, int b, int c);//权函数int main()
{int **s = new int *[N];int **t = new int *[N];for (int i = 0; i<N; i++){s[i] = new int[N];t[i] = new int[N];}cout << "此多边形的最优三角剖分权值为:" << MinWeightTriangulation(N - 1, t, s) << endl;cout << "最优三角剖分结构为:" << endl;Traceback(1, 5, s); //s[i][j]记录了Vi-1和Vj构成最优三角形的第3个顶点的位置return 0;
}int MinWeightTriangulation(int n, int **t, int **s)
{for (int i = 1; i <= n; i++){t[i][i] = 0;}for (int r = 2; r <= n; r++) //r为当前计算的链长(子问题规模),即vi...vj的长度  {for (int i = 1; i <= n - r + 1; i++)//n-r+1为最后一个r链的前边界  {int j = i + r - 1;//计算前边界为r,链长为r的链的后边界  t[i][j] = t[i + 1][j] + Weight(i - 1, i, j);//将链ij划分为A(i) , ( A[i+1:j] )这里实际上就是k=i,s[i][j] = i;for (int k = i + 1; k<j; k++){//将链ij划分为( A[i:k] ),(A[k+1:j])   int u = t[i][k] + t[k + 1][j] + Weight(i - 1, k, j);if (u<t[i][j]){t[i][j] = u;//记录最小的权值s[i][j] = k;//记录划分三角形的顶点,s[i][j]记录了Vi-1和Vj构成最优三角形的第3个顶点的位置}}}
}
return t[1][N - 2];//t[1][5]
}void Traceback(int i, int j, int **s)
{if (i == j) return;Traceback(i, s[i][j], s);//先回溯vi-1,vk的子问题Traceback(s[i][j] + 1, j, s);//再回溯v(k+1),vj的子问题cout << "三角剖分顶点:V" << i - 1 << ",V" << j << ",V" << s[i][j] << endl;
}int Weight(int a, int b, int c)
{	return weight[a][b] + weight[b][c] + weight[a][c];
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/147259.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SEO搜索引擎

利用搜索引擎的规则提高网站在有关搜索引擎内的自然排名&#xff0c;吸引更多的用户访问网站&#xff0c;提高网站的访问量&#xff0c;提高网站的销售能力和宣传能力&#xff0c;从而提升网站的品牌效应 搜索引擎优化的技术手段 黑帽SEO 通过欺骗技术和滥用搜索算法来推销毫不…

Armv8/Armv9 Cache知识大纲分享--思维导图

关键词&#xff1a;cache学习、mmu学习、cache资料、mmu资料、arm资料、armv8资料、armv9资料、 trustzone视频、tee视频、ATF视频、secureboot视频、安全启动视频、selinux视频&#xff0c;cache视频、mmu视频&#xff0c;armv8视频、armv9视频、FF-A视频、密码学视频、RME/CC…

力扣:118. 杨辉三角(Python3)

题目&#xff1a; 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官…

DS线性表之链表

前言 我们上一期介绍了顺序表&#xff0c;它的底层就是数组&#xff0c;我们也分别对顺序表的动态版本和静态版本进行了实现&#xff01;并且分析了顺序表的优缺点&#xff0c;优点是&#xff1a;尾插、尾删效率很高&#xff0c;其时间复杂度是O(1)&#xff1b;缺点是&#xff…

使用 ClassFinal 对 java class 文件进行加密防止反编译

ClassFinal 是一款 java class文件安全加密工具&#xff0c;支持直接加密 jar 包或 war 包&#xff0c;无需修改任何项目代码&#xff0c;兼容 spring-framework&#xff1b;可避免源码泄漏或字节码被反编译 特点 无需修改原项目代码&#xff0c;只要把编译好的jar/war包用本工…

Nginx简介与Docker Compose部署指南

Nginx是一款高性能的开源Web服务器和反向代理服务器&#xff0c;以其卓越的性能、可伸缩性和灵活性而闻名。它在全球范围内广泛用于托管Web应用程序、负载均衡、反向代理和更多场景中。在本文中&#xff0c;我们将首先介绍Nginx的基本概念&#xff0c;然后演示如何使用Docker C…

tortoiseSVN树冲突解决方案

方案一&#xff1a; 手动导出 trunk 上的文件(夹)&#xff0c;把本地目录文件(夹)删了并替换成 trunk上的&#xff0c;再点击测试合并方案二&#xff1a; 如果执行了方案一还是冲突&#xff0c;确认本地和trunk文件一致后&#xff0c;可以跳过冲突的revision

【NLP的python库(03/4) 】: 全面概述

一、说明 Python 对自然语言处理库有丰富的支持。从文本处理、标记化文本并确定其引理开始&#xff0c;到句法分析、解析文本并分配句法角色&#xff0c;再到语义处理&#xff0c;例如识别命名实体、情感分析和文档分类&#xff0c;一切都由至少一个库提供。那么&#xff0c;你…

Linux--socket编程

socket套接字编程 一、服务器和客户端的开发步骤&#xff1a; 1、创建套接字 2、为套接字添加信息&#xff08;ip地址和端口号&#xff09; 3、监听网络连接 4、监听到有客户端接入&#xff0c;接受连接&#xff08;如没有接入&#xff0c;会发生阻塞到&#xff09; 5、数据…

【机器学习】熵和概率分布,图像生成中的量化评估IS与FID

详解机器学习中的熵、条件熵、相对熵、交叉熵 图像生成中常用的量化评估指标通常有Inception Score (IS)和Frchet Inception Distance (FID) Inception Score (IS) 与 Frchet Inception Distance (FID) GAN的量化评估方法——IS和FID&#xff0c;及其pytorch代码

Unity 鼠标悬浮时文本滚动(Text Mesh Pro)

效果 直接将脚本挂载在Text Mesh Pro上&#xff0c;但是需要滚动的文本必须在Scroll View中&#xff0c;否侧会定位错误&#xff0c;还需要给Scroll View中看需求添加垂直或者水平布局的组件 代码 using System.Collections; using System.Collections.Generic; using UnityE…

思科:iOS和iOSXe软件存在漏洞

思科警告说,有人试图利用iOS软件和iOSXe软件中的一个安全缺陷,这些缺陷可能会让一个经过认证的远程攻击者在受影响的系统上实现远程代码执行。 中严重程度的脆弱性被追踪为 CVE-2023-20109 ,并以6.6分得分。它会影响启用Gdoi或G-Ikev2协议的软件的所有版本。 国际知名白帽黑客…

世界前沿技术发展报告2023《世界航天技术发展报告》(二)卫星技术

&#xff08;二&#xff09;卫星技术 1.概述2. 通信卫星2.1 美国太空发展局推进“国防太空体系架构”&#xff0c;持续部署“传输层”卫星2.2 美国军方在近地轨道成功演示验证星间激光通信2.3 DARPA启动“天基自适应通信节点”项目&#xff0c;为增强太空通信在轨互操作能力提供…

c#设计模式-结构型模式 之 组合模式

&#x1f680;简介 组合模式又名部分整体模式&#xff0c;是一种 结构型设计模式 &#xff0c;是用于把一组相似的对象当作一个 单一的对象 。组合模式 依据树形结构来组合对象 &#xff0c;用来表示部分以及整体层&#xff0c;它可以让你将对象组合成树形结构&#xff0c;并且…

【AI视野·今日CV 计算机视觉论文速览 第258期】Mon, 2 Oct 2023

AI视野今日CS.CV 计算机视觉论文速览 Mon, 2 Oct 2023 (showing first 100 of 112 entries) Totally 100 papers &#x1f449;上期速览✈更多精彩请移步主页 Interesting: &#x1f4da;HAvatar,基于神经辐射场的头部合成重建。(from 清华大学) &#x1f4da;GAIA-1, 用于自…

线上Vue项目访问其他服务器接口(宝塔平台配置解决)

前端本地解决跨域问题非常简单&#xff0c;配置代理即可&#xff0c;线上需要配置nginx&#xff0c;宝塔给我们更简单的配置方式&#xff1a;反向代理。 登录进宝塔页面&#xff0c;选择网站&#xff0c;点击网站名&#xff0c;选择反向代理 点击添加反向代理 注意&#xff…

分类预测 | Matlab实现SSA-CNN-SVM麻雀算法优化卷积支持向量机分类预测

分类预测 | Matlab实现SSA-CNN-SVM麻雀算法优化卷积支持向量机分类预测 目录 分类预测 | Matlab实现SSA-CNN-SVM麻雀算法优化卷积支持向量机分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现SSA-CNN-SVM麻雀算法优化卷积支持向量机分类预测&#xff0…

华为乾坤区县教育安全云服务解决方案(2)

本文承接&#xff1a; https://blog.csdn.net/qq_37633855/article/details/133276200?spm1001.2014.3001.5501 重点讲解华为乾坤区县教育安全云服务解决方案的部署流程。 华为乾坤区县教育安全云服务解决方案&#xff08;2&#xff09; 课程地址解决方案部署整体流程组网规划…

数字IC前端学习笔记:数字乘法器的优化设计(进位保留乘法器)

相关阅读 数字IC前端https://blog.csdn.net/weixin_45791458/category_12173698.html?spm1001.2014.3001.5482 阵列乘法器设计中限制乘法器速度的是随着数据位宽而迅速增大的串行进位链&#xff0c;如果使用进位保留加法器&#xff0c;则可以避免在设计中引入较长时间的等待&…

springmvc-JSR303进行服务端校验分组验证SpringMVC定义Restfull接口异常处理流程RestController异常处理

目录& 1. JSR303 2. JSR303中含有的注解 3. spring中使用JSR303进行服务端校验 3.1 导入依赖包 3.2 添加验证规则 3.3 执行校验 4. 分组验证 4.1 定义分组验证规则 4.2 验证时通过参数指定验证规则 4.3 验证信息的显示 5. SpringMVC定义Restfull接口 5.1 增加s…