Monge矩阵

Monge矩阵

对一个m*n的实数矩阵A,如果对所有i,j,k和l,1≤ i<k ≤ m和1≤ j<l ≤ n,有          A[i,j]+A[k,l] ≤ A[i,l]+A[k,j]   那么,此矩阵A为Monge矩阵。

换句话说,每当我们从矩阵中挑出两行与两列,并且考虑行列交叉处的4个元素,左上角与右下角的和小于或等于左下角与右上角元素的和。

例如,下面这个就是一个Monge矩阵

(1)证明一个矩阵为Monge阵,当且仅当对所有i=1,2,...,m-1和j=1,2,...,n-1,有            A[i,j]+A[i+1,j+1] ≤ A[i,j+1]+A[i+1,j]

(提示:在当部分,对行、列分别使用归纳法。)

(2)下面的矩阵不是Monge阵。改变一个元素,把它变成Monge矩阵

             37       23       22      32

             21        6       27      10

             53       34       30      31

             32       13        9       6

             43       21       15       8

很明显是要改27,27可以改成【2,5】内的任何一个实数

(3)假设f(i)是第i行包含最左端最小值的列的索引值。证明对任何的m x n Monge矩阵,有f(1) ≤ f(2) ≤...≤ f(m)。

(4)下面是一个用来计算m x n 的Monge矩阵A中每一行的最左最小值的分治算法的描述:

   构造一个包含所有A的偶数行的子矩阵A'。递归地计算A'中每一行的最左端最小值。然后计算A中奇数行的最左端最小值。

   解释如何能在O(m+n)时间内计算出A的奇数行的最左端最小值?(在偶数行最左最小值已知的情况下)

解释:看下面的代码就很明显了。

其实这个算法,我个人感觉,就结构而言比较像分治,但是就思想而言比较像动态规划。

(5)写出(4)所描述算法的运行时间的递归式,并证明其解为O(m+nlogm)

T(m)=T(m/2)+ O(m+n)(求解略)

我的代码:
 

#include<iostream>
using namespace std;void calculate(double **A, int r1, int r2, int min, int max, int *f)	//计算f(r1)到f(r2)
{if (r1 > r2)return;int r = (r1 + r2) / 2;int result = min;int flag = A[r][min];for (int i = min + 1; i <= max; i++)	//寻找最左最小元素flag,和它的的下标result{if (A[r][i] < flag){flag = A[r][i];result = i;}}f[r] = result;calculate(A, r1, r - 1, min, result, f);calculate(A, r + 1, r2, result, max, f);
}bool isMonge(double **A, int m, int n)	//判断是否是Monge矩阵
{for (int i = 0; i < m - 1; i++)for (int j = 0; j < n - 1; j++)if (A[i][j] + A[i + 1][j + 1]>A[i + 1][j] + A[i][j + 1])return false;return true;
}
int main()
{int m, n;while (cin >> m >> n && m>1 && n > 1){double **A = new double*[m];		//Monge矩阵int *f = new int[m];	//不需要在主函数里面进行初始化,这个工作由calculate函数完成for (int i = 0; i < m; i++){A[i] = new double[n];for (int j = 0; j < n; j++)cin >> A[i][j];}if (isMonge(A, m, n)){cout << "这个是Monge矩阵" << endl;calculate(A, 0, m - 1, 0, n - 1, f);for (int i = 0; i < m; i++)cout << "第" << i << "行的最左最小元素的列下标是" << f[i] << endl;}else cout << "这个不是Monge矩阵";}return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

2.0 Maven基础

1. Maven概述 Maven概念 Apache Maven是一个软件项目管理工具&#xff0c;将项目开发和管理过程抽象程一个项目对象模型&#xff08;POM&#xff0c;Project Object Model&#xff09;。 Maven作用 项目构建 提供标准的、跨平台的自动化项目构建方式。 依赖管理 方便快捷…

字符转ASCII码

一、问题描述 二、代码内容 三、代码解释 # include <iostream> #include <cstdio> using namespace std; int main() { char a;//存放字符a scanf("%d",&a);//输入字符a printf("%d",a);//输出a对应的ASCII码 return 0&#xff1b; …

字符转 ASCII 码

字符转 ASCII 码 //字符转 ASCII 码//1.如下是转换单个字符 //#include <stdio.h> //int main() //{ // char c; // printf("输入一个字符: "); // // // 读取用户输入 // scanf("%c", &c); // // // %d 显示整数 // …

java字符与ASCII码相互转换

java字符与ASCII码相互转换 一 、遍历字符串二、 java 字符 转换 ASCII码三、 java ASCII码 转换 字符 字符串&#xff1a; String s "abcdefg";一 、遍历字符串 public static void main(String[] args) {String s "abcdefg";// 遍历字符串 for (i…

【LeetCode】45. 跳跃游戏 II - 贪婪算法

目录标题 2023-8-11 09:49:25 45. 跳跃游戏 II 2023-8-11 09:49:25 自己没做出来&#xff0c;废物Orz class Solution {public int jump(int[] nums) {int length nums.length;int end 0;int maxPosition 0;int steps 0;for (int i 0; i < length - 1; i) {maxPosit…

docker-compose redis 一直启动失败

环境&#xff1a; centos 8.x 背景 使用docker-compose 来启动redis docker-compose.yml 如下&#xff1a; version: 3.3 services:redis:image: redis:latestrestart: alwayscontainer_name: redisports:- 6379:6379volumes:- ./data:/redis/data- ./redis.conf:/redis/re…

用什么软件抓cd音轨音质最好_开车不嗨皮,那跟咸鱼有什么区别

文 | 大青枣 图 | 潘隐 跑长途是件很无聊的事情&#xff0c;看着车窗外的车水马龙&#xff0c;想到接下来的漫漫长路&#xff0c;立马就想打盹。 但正所谓行车不规范&#xff0c;亲人两行泪。所以为了让能够安全并快乐的从A点到B点。司机和主机厂都会给车里配备一些娱乐系统&am…

群晖DS Video支持DTS音轨(最新解决方案)

目录 一、前言 二、实现 1、下载ffmpeg的DTS支持包 2、安装ffmpeg 3、使用新的ffmpeg覆盖默认版本 4、开启DTS支持 5、可能存在的问题与解决办法 三、惯例 一、前言 最近突然在网上找到了一篇文件提供了DTS音轨的支持方法。于是去尝试了一下&#xff0c;居然真行。于是…

用tsMuxeR GUI给ts视频添加音轨

收藏比赛的都应该知道&#xff0c;高清的直播流录制了后一般是ts或者mkv封装&#xff0c;前者用tsMuxeR GUI可以对视频音频轨进行操作&#xff0c;后者用mkvtoolnix&#xff0c;两者都是无损操作。 至于其他格式就不考虑了&#xff0c;随便用其他的工具&#xff0c;因为本身是有…

Android多媒体(一) 音轨合成 我用双手成就你的梦想

近期需要做音轨合成这样一个功能&#xff0c;何为音轨合成&#xff0c;说白了就是N个音频文件合成一个&#xff0c;同时播放N个声音。然而网上各种找代码&#xff0c;并没有一个能用的&#xff0c;最后终于找到一个外国大神写的合音工具类&#xff0c;稍加修改便成了自己的东西…

FFMpeg 实现从视频中提取音轨

近期由于项目需要&#xff0c;要实现以下功能&#xff1a;将视频中的音轨提取出来&#xff0c;也就是只保留音频部分&#xff0c;以便于后期对于声音的处理。 我选择的工具是 FFMpeg &#xff0c;环境&#xff1a;win7 首先&#xff0c;从官网上下载FFMpeg的文件包&#xff0c;…

html5音轨的提取,(图文)mkv音轨提取软件 如何提取mkv中的音轨

很多人都知道&#xff0c;MKV是个“组合”和“封装”的格式&#xff0c;换句话说就是一种容器格式。最大的特点就是能容纳多种不同类型编码的视频、音频及字幕流。现在流行的高清电影一般都是MKV格式&#xff0c;里面可能包含有多个音轨&#xff0c;方便我们在播放视频时选择需…

html5音轨字幕,(图解)如何修改mkv默认音轨和字幕

平常有下载一些MKV双语电影在家里看,一般播放时电影默认播放外语加中文字幕,不过家里老爸老妈听不懂外语,所以每次看片时我还要手动切换音轨变成国语的。要是可以修改mkv的默认音轨或字幕就好了,于是我就找出了以下修改mkv默认音轨和字幕的解决方案,顺便分享一下,也许能帮…

前后端分离------后端创建笔记(上)

本文章转载于【SpringBootVue】全网最简单但实用的前后端分离项目实战笔记 - 前端_大菜007的博客-CSDN博客 仅用于学习和讨论&#xff0c;如有侵权请联系 源码&#xff1a;https://gitee.com/green_vegetables/x-admin-project.git 素材&#xff1a;https://pan.baidu.com/s/…

提取视频多音轨: 魔力玄(Medlexo) V9.7 (2023-01-31更新)

软件名称 (Windows) 魔力玄(Medlexo) 一句简介 假如一个视频144mb&#xff0c;改后缀等于没转换。如果真正提取音轨&#xff0c;就能得到没转换过的原音轨&#xff0c;大小可能才4mb。 这是一个ffmpeg 以及 yt-dlp 图形化软件&#xff0c;这个工具大小3mb&#xff0c;可以一…

yama搜集的超超…全的下载音效的网站,持续更新

yama有时间就会更新搜集的音效下载网站&#xff0c;哼唧~ 1.Find Sounds.com 一个免费网站&#xff0c;用于在网上查找声音效果。它是一个网络搜索引擎。提供强大的功能&#xff0c;简单易用&#xff0c;我们平时找音频资源的时候就可以到这个网站找你需要的资源&#xff0c;…

RTT(RT-Thread)线程间同步(保姆级)

目录 线程间同步 信号量 信号量结构体 信号量的使用和管理 动态创建信号量 实例 静态创建信号量 初始化和脱离信号量 获取信号量 信号量的互斥操作 获取信号量函数 释放信号量 信号量同步实例 互斥量&#xff08;互斥锁&#xff09; 互斥量的使用和管理 动态创…

【网络编程·网络层】IP协议

目录 一、IP协议的概念 二、IP协议的报头 1、四位首部长度 2、16位总长度&#xff08;解包&#xff09; 3、8位协议&#xff08;分用&#xff09; 4、16位首部校验和 5、8位生存时间 6、32位源IP和32位目的IP 7、4位版本/8位服务类型 8、16位标识 9、3位标志 10、1…

无涯教程-Perl - lock函数

描述 此函数将咨询锁放在共享变量或THING中包含的引用对象上,直到该锁超出范围。 lock()是一个"弱关键字":这意味着,如果您在调用该函数之前已通过该名称定义了该函数,则将改为调用该函数。 语法 以下是此函数的简单语法- lock THING返回值 此函数不返回任何值…

Python接口自动化测试之UnitTest详解

基本概念 UnitTest单元测试框架是受到JUnit的启发&#xff0c;与其他语言中的主流单元测试框架有着相似的风格。其支持测试自动化&#xff0c;配置共享和关机代码测试。支持将测试样例聚合到测试集中&#xff0c;并将测试与报告框架独立。 它分为四个部分test fixture、TestC…