凸多边形最优三角

article/2025/9/18 12:04:26

前言:大三下算法课,自己看的凸多边形最优三角,最后上台讲解,和子涵苗子等一起的一段时间

1.相关概念

  凸多边形:一个简单多边形及其内部构成一个闭凸集时,则 称该简单多边形为一个凸多边形。
边:多边形相邻两点的连线
弦:多边形不相邻两点的连线

2.问题定义——凸多边形最优三角

给定凸多边形 P ,以及定义在由多边形的边和弦组成的三角形上的权函数 w 。要求确定该凸多边形的三角剖分,使得该三角剖分中所有三角形上权之和为最小。
(这个定义删减了些数学描述,只描述了问题)
相关性质:
   对一个n 边形划分三角问题中,有( 1 )弦: n-3                                                                                                                                2 三角形: n-2
权函数:
权函数是一个自己定义的函数,也就是给凸多边形上的边和弦定义的代价,你可以将边的权定义为路径,时间,距离等,可以赋予你想要的实际意义,下面的程序中的权函数定义的是三角形的周长

3.与矩阵连乘的关系

    一个表达式的完全加括号方式相应与一颗完全二叉树,称为表达式的语法树

    凸n边形的三角划分对应一颗n-1个叶节点的语法树

    凸多边形的语法树,以边为节点

 矩阵连乘的最优计算问题是凸多边形最优三角划分问题的特殊情况

4.最优子结构性质

若凸 (n+1) 边形 P={V0,V1…… Vn } 的最优三角剖分 T 包含三角形 V0VkVn,1<=k<=n
T 的权为三个部分权之和:三角形 V0VkVn 的权,多边形 {V0,V1…… Vk } 的权和多边形
{Vk,Vk+1…… Vn } 的权之和。
可以断言,由 T 确定的这两个子多边形的三角剖分也是最优的。
因为若有 {V0,V1…… Vk } {V0,V1…… Vk } 更小权的三角剖分,将导致 T 不是最优三角剖分的矛
盾。因此,凸多边形的三角剖分问题具有最优子结构性质。

5.递归结构

 先来看矩阵连乘的递归结构

 矩阵连乘分为左半边+右半边+合并时间

而多边形分割的递归结构如下:

 可以看到这两个递归结构十分相似

6.代码实现

package 凸多边形最优三角分割;import java.util.Scanner;public class minWeightTriangulation {public static void main(String[] args) {Scanner in = new Scanner(System.in);System.out.println("几边形?");int n = in.nextInt();int[][] n1 = new int[n][n];int[][] m = new int[n][n];int[][] s = new int[n][n];shuzu(n, n1);minWeightTriangulation(n-1, m, s, n1);System.out.println("最优值");shuchu(m);System.out.println("最优解");shuchu(s);System.out.println("划分点");Traceback(1,n-1,s);}//p为边数,n为存储权值的二维数组public static void shuzu(int p, int[][] n) {Scanner in = new Scanner(System.in);//初始化对角线for (int i = 0; i < p; i++)for (int i1 = 0; i1 < p; i1++)n[i][i1] = 0;for (int i = 0; i < p - 1; i++) {for (int l = i + 1; l < p; l++) {System.out.print(i + "点到" + l + "点,边的权值为:");n[i][l] = in.nextInt();}}System.out.println("\n测试输出\n");shuchu(n);}public static void shuchu(int[][] n) {/*测试输出*/for (int i = 0; i < n.length; i++) {for (int l = 0; l < n.length; l++) {System.out.printf("%-8d%s",n[i][l] , " ");}System.out.println();}}public static void minWeightTriangulation(int n, int[][] m, int[][] s, int[][] q) {for (int i = 1; i <= n; i++) {m[i][i] = 0;}//        m最优值,s最优解  w权函数for (int r = 2; r <= n; r++) {//i与j的差值for (int i = 1; i <= n - r + 1; i++) {int j = i + r - 1;m[i][j] = m[i + 1][j] + w(i - 1, i, j, q);//k==i的情况s[i][j] = i;for (int k = i + 1; k < i + r - 1; k++) {int u = m[i][k] + m[k + 1][j] + w(i - 1, k, j, q);if (u < m[i][j]) {m[i][j] = u;s[i][j] = k;}}}}}//    权值函数private static int w(int a, int b, int c, int[][] n) {int num = n[a][b] + n[b][c] + n[a][c];return num;}/*递归倒退函数*/public static void Traceback(int i, int j, int[][] s) {if (i == j) {return;}//子问题的K值Traceback(i, s[i][j], s);Traceback(s[i][j] + 1, j, s);System.out.println("剖分点:" + (i - 1) + " " + j + " " + s[i][j]);}}

7.测试

输入边的权值,之后根据划分点写出分割的多边形,再去计算权值之和,看是否和程序输出的最优值相等

输入:

 输出:

 计算:

 测试通过!

8.复杂度分析

从程序中不难看出 时间复杂度为n*n   空间复杂度为n*n

9.其他

在研究这个算法时,发现一些很有趣但不确定是否有价值的点

在输出的最优解矩阵中,数值最大的那个数字,是Traceback(划分点输出函数)的递归层数,是建立语法树的深度,是划分三角形的个数

算法的用途:不规则房间监控问题    将房间区域划分为凸多边形,再用算法解决

ppt

贴不到这里,有需要联系我  扣扣1586470758

相关知识:

如何看懂程序输出的最优解矩阵(用最优解矩阵手动划分三角)

凸多边形最优三角剖分

动态规划_凸多边形最优三角剖分_哔哩哔哩


http://chatgpt.dhexx.cn/article/Podkm99I.shtml

相关文章

动态规划DP——凸多边形最优三角剖分

1.问题分析 我们可以把披萨饼看作是一个凸多边形&#xff0c;凸多边形是指多边形的任意两点的连线均落在多边形的内部或边界上。 &#xff08;1&#xff09;什么是凸多边形&#xff1f; 如下图所示&#xff0c;是一个凸多边形 如下图所示&#xff0c;不是一个凸多边&#xff0c…

凸多边形、凹多边形、凸包算法

凸多边形&#xff1a; &#xff08;Convex Polygon&#xff09;可以有以下三种定义&#xff1a; 1、没有任何一个内角是优角&#xff08;Reflexive Angle&#xff09;的多边形。 2、如果把一个多边形的所有边中&#xff0c;有一条边向两方无限延长成为一直线时&#xff0c;其他…

搜狗浏览器屏蔽广告插件_“云法庭”里“云勘验” 法院开审搜狗浏览器插件屏蔽优酷视频广告案...

在第20个世界知识产权日到来之际&#xff0c;北京海淀法院通过“北京法院云法庭”公开开庭审理原告优酷信息技术(北京)有限公司(下称优酷公司)与被告北京搜狗科技发展有限公司、被告北京搜狗信息服务有限公司(下合称搜狗公司)涉搜狗浏览器插件屏蔽优酷视频广告不正当竞争纠纷案…

搜狗浏览器屏蔽广告插件_“云法庭”里“云勘验”,海淀法院开庭审理搜狗浏览器插件屏蔽优酷视频广告不正当竞争纠纷案...

来源&#xff1a; 北京海淀法院 特别提示&#xff1a;凡本号注明“来源”或“转自”的作品均转载自媒体&#xff0c;版权归原作者及原出处所有。所分享内容为作者个人观点&#xff0c;仅供读者学习参考&#xff0c;不代表本号观点。 在第20个世界知识产权日到来之际&#xff0…

搜狗浏览器屏蔽广告插件_“云法庭”里“云勘验”法院开审搜狗浏览器插件屏蔽优酷视频广告案...

在第20个世界知识产权日到来之际&#xff0c;北京海淀法院通过“北京法院云法庭”公开开庭审理原告优酷信息技术(北京)有限公司(下称优酷公司)与被告北京搜狗科技发展有限公司、被告北京搜狗信息服务有限公司(下合称搜狗公司)涉搜狗浏览器插件屏蔽优酷视频广告不正当竞争纠纷案…

【视频广告位叫法】

例如&#xff1a;爱奇艺&#xff0c;优酷&#xff0c;腾讯视频&#xff0c;前贴&#xff0c;中插&#xff0c;暂停贴&#xff0c;后贴广告位&#xff01;

优酷 DSP 广告投放系统架构实践

作者 | 鸿雁 阿里文娱技术专家 导读&#xff1a;随着 RTB 网络在线展现广告交易模式的兴起&#xff0c;各大公司都纷纷搭建自己的 DSP ( Demand-Side Platform ) 广告投放系统进行获客。优酷在近几年也搭建 DSP 系统&#xff0c;并且在持续迭代。在这一过程中&#xff0c;经历…

优酷视频在网站里播放

工具/原料 准备一组代码&#xff1a; <embed srchttp://static.youku.com/v1.0.0149/v/swf/loader.swf?VideoIDS视频ID&winTypeadshow&isAutoPlaytrue quality"high" width"580" height"435" align"middle" allowScriptA…

网页引用优酷视频并添加封面自动播放

引用优酷视频可以减轻公司的服务器压力&#xff0c;而且和自己上传保存视频相比会方便轻松许多&#xff0c;不过相对的需要忍受广告。 首先你需要在优酷里找到你要引用的视频&#xff0c;或者自己上传。然后打开会有一个分享按钮&#xff1a; 以我使用的第二个为例&#xff0…

html上传优酷视频,如何将视频发布到自己的企业网站上?

郑州做网站是为了更好的宣传企业&#xff0c;如果网站要想有视频的表现形式&#xff0c;那就得花点心思去考虑了。一般情况下&#xff0c;要想把视频放到网站上&#xff0c;无外乎就两种方式&#xff1a;第一、直接把视频上传到网站目录&#xff0c;然后在合适的位置调用。由于…

php视频系统源码,基于ThinkPHP框架仿优酷视频源码带数据,后台功能强大

源码介绍 最新高仿优酷视频网源码带数据&#xff0c;后台功能齐全强大&#xff0c;而且是基于thinkphph内核开发&#xff0c;很不错&#xff0c;虽然是旧版模板&#xff0c;但是也值得学习&#xff0c;尤其是正在学习ThinkPHP框架的人拿来学习&#xff0c;相信你需要&#xff0…

鸿蒙os去广告,隐藏福利?华为鸿蒙OS新惊喜:优酷视频流转播放可免广告

近日&#xff0c;华为鸿蒙OS 2.0开发者公测版推送正式开启&#xff0c;包括华为Mate X2、Mate 40系列等机型均可先行尝鲜。 根据目前已知信息来看&#xff0c;华为手机从6月初开始将可升级鸿蒙系统。 随着参与开发者公测的用户逐渐增多&#xff0c;网上出现大量鸿蒙OS的测试体验…

优酷视频整段代理php,thinkphp仿优酷带数据源码|php仿优酷视频源码带后台功能强大...

本项目是仿优酷官网&#xff0c;优酷官网是一个集多种知识面为一体的网站&#xff0c;能全面的锻炼我们的技能,所以我们决定仿优酷网。 本项目后台主要实现了&#xff1a;用户管理、分类管理、视频管理、评论管理、权限管理、轮播管理、网站配置和广告管理以及登录退出等模块。…

android加载优酷视频播放器,使用android优酷视频云一些问题

最近项目迭代需要添加视频播放功能&#xff0c;由于若干原因就选择了优酷视频&#xff0c;本来挺简单的一个功能在做的时候居然碰到了若干意想不到的问题&#xff0c;果然还是优酷视频提供的demo最稳定啊&#xff0c;啥问题木有~~o(>_ 好了&#xff0c;闲话不多说&#xff0…

html调用优酷视频播放,优酷网视频播放器站外调用详解

优酷网视频播放器站外调用详解 蓝叶 网站设计 2011-03-21 14201 5评论 自从蓝叶准备做视频盒&#xff0c;就一直在研究各个视频站播放器调用代码&#xff0c;只要搞明白了 代码我都共享出来了&#xff0c;这次说说优酷网播放器的站外调用方法。优酷网默认获取的 站…

mac os x 设置终端快捷键

大家都知道在linux下可以用ctraltt组合快捷来打开终端&#xff0c;那么在OS X上可以吗&#xff1f;答案是肯定的&#xff0c;其实OS X上很多功能都可以通过Apple自家的Automator.app创建&#xff0c;且使用此方法可以为任何程序创建快捷键。 废话少说&#xff0c;下面给大家演…

Mac - 当前位置打开终端

1、点击屏幕顶部的“Finder”弹出下拉菜单。 2、点击“服务”菜单项弹出子菜单&#xff0c;点击子菜单中的“服务偏好设置” 3、点击弹出的服务偏好设置窗口中的“服务”并勾选“新建位于文件夹位置的终端窗口”&#xff1b;点击该项还可以为该操作设置快捷键。 4、关闭设置窗口…

Mac自己创建打开终端快捷键(任意软件)

这里就以为“终端”程序设置一个快捷启动键。 1、打开自带的Automator&#xff08;可以用右上角Spotlight搜索找到&#xff09; 2、在创建界面选择“服务” 3、如图&#xff1a;左侧列表中&#xff0c;找到&#xff1a;操作——资源库——实用工具——开启应用程序 右侧…

Xcode终端快捷键

Xcode 直接打开终端 Xcode作为开发编辑器&#xff0c;居然不能直接打开终端&#xff0c;所以就没有快捷键&#xff0c;但是可以借助自定义 Behavior 来执行脚本&#xff0c;这样就有快捷键了&#xff0c;比如我的CMD Shift T。 1. 准备打开终端的脚本 首先编辑 shell 脚本…

MAC 终端快捷键实用

首先需要打开终端&#xff0c;这个基本都会用的吧。 在Dock里面打开Launchpad&#xff08;也可快捷键F3&#xff09;&#xff0c;找到终端的图标&#xff0c;点击打开就OK了。 现在准备工作已经做完&#xff0c;我们就来进行实地操作吧。 commandN&#xff1a;打开多个终端窗口…