矩阵链相乘(动态规划法)

问题分析

矩阵链相乘问题是一个经典的动态规划问题。给定一系列矩阵,目标是找到一种最优的乘法顺序,使得所有矩阵相乘所需的标量乘法次数最少。矩阵链相乘问题的关键在于利用动态规划来避免重复计算子问题。

算法设计

  • 定义子问题:设 𝑤[𝑖,𝑗]表示计算矩阵 𝐴𝑖 到 𝐴𝑗的最小乘法次数。
  • 递归关系:根据递归关系式:

    其中 𝑝 是矩阵的维度数组,𝑝𝑖表示第 𝑖个矩阵的行数,​ p_{i+1}表示第 𝑖个矩阵的列数。   
  •  w[i,j]  表示第 i个矩阵到第 j个矩阵,路径上的矩阵链的最小代价
  •  p_{i-1}p_{k}p_{j} 代表从最优子解向它的最优父解构造时需要的代价
  • 边界条件:当 𝑖=𝑗 时,𝑤[𝑖,𝑗]=0,因为单个矩阵不需要乘法。
  • 计算顺序:从小规模问题开始,逐步计算较大规模问题。

其他的情况以此类推.....

伪代码

function MatrixChainOrder(p):n = length(p) - 1let w be a 2D array of size n x nfor i = 1 to n:w[i, i] = 0for l = 2 to n:  // l is the chain lengthfor i = 1 to n - l + 1:j = i + l - 1w[i, j] = infinityfor k = i to j - 1:q = w[i, k] + w[k + 1, j] + p[i - 1] * p[k] * p[j]if q < w[i, j]:w[i, j] = qreturn w[1, n]

C实现

#include <stdio.h>
#include <limits.h>void MatrixChainOrder(int p[], int n) {int w[n][n];int i, j, k, l, q;for (i = 1; i < n; i++)w[i][i] = 0;for (l = 2; l < n; l++) {for (i = 1; i < n - l + 1; i++) {j = i + l - 1;w[i][j] = INT_MAX;for (k = i; k <= j - 1; k++) {q = w[i][k] + w[k + 1][j] + p[i - 1] * p[k] * p[j];if (q < w[i][j])w[i][j] = q;}}}printf("Minimum number of multiplications is %d\n", w[1][n - 1]);
}int main() {int arr[] = {1, 2, 3, 4};int size = sizeof(arr) / sizeof(arr[0]);MatrixChainOrder(arr, size);return 0;
}

结果如下:

总结

时间复杂度:算法的时间复杂度描述了算法执行所需要的时间与输入规模之间的关系。对于矩阵链相乘问题的动态规划算法,其时间复杂度通常为 𝑂(𝑛3)O(n3),其中 𝑛n 表示矩阵链中矩阵的个数。这样的时间复杂度在实际应用中通常是可以接受的。

空间复杂度:算法的空间复杂度描述了算法所需的额外空间与输入规模之间的关系。对于矩阵链相乘问题的动态规划算法,通常需要创建一个二维数组来存储子问题的解,因此空间复杂度为 𝑂(𝑛2)O(n2)。空间复杂度较低,适用于大部分计算机内存空间充足的情况。

初来乍到,蠢蠢小白,欢迎各路大神批评指正!!

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

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

相关文章

HTTP-一

一、超文本传输 1. 文本传输 > 字符串(能在utf8/gbk等码表上找到合法字符) 2. 超文本传输 > 不仅仅是字符串,还可以携带一些图片,特殊得格式 HTML 3. 富文本 word http0.9 -> http1.0 -> http1.1 -> http2.0 -> http3.0 http1.0是主流版本 2.0 和…

redis安裝启动

1、下载redis解压 https://github.com/tporadowski/redis/releases 2、打开cmd&#xff0c;切换到解压的文件夹 3、redis-server.exe redis.windows.conf 启动redis redis可通过命令行输入config set requirepass password和直接修改redis.config文件中修改 requirepass 来设…

英伟达再创历史,市值超越苹果,跃居全球第二大上市公司

进入2024年&#xff0c;英伟达股价依然突飞猛进。 今天凌晨&#xff0c;英伟达凭借其在AI领域强劲的创新能力和市场势头&#xff0c;达成了历史性的里程碑——市值首次突破3万亿美元&#xff0c;成功超越苹果&#xff0c;成为全球市值第二大上市公司。 排名仅次于微软。 英伟达…

f1c100s 荔枝派 系统移植

一。交叉编译环境配置 1.1下载交叉工具链&#xff1a;https://releases.linaro.org/components/toolchain/binaries/7.2-2017.11/arm-linux-gnueabi/ 1.2解压安装 在home目录下新建 工程目录&#xff1a;mkdir f1c100s_project 将windows下的gcc-linaro-7.2.1-2017.11-x86…

二叉搜索树(BST,Binary Search Tree)

目录 前言 一、二叉搜索树概念 二、二叉搜索树的实现与操作 1.查找 2.插入 3.删除 4.中序遍历 5.完整代码 三、二叉搜索树的应用&#xff08;K模型、KV模型&#xff09; 1.K模型 2.KV模型 3.完整代码 四、二叉搜索树的性能分析 前言 为何学&#xff1f; 1.二叉…

我的python管理

目前环境 Anaconda&#xff1a;python3.9 python2.7 IDA&#xff1a;python3.8 pycharm&#xff1a;&#xff1f;&#xff1f; 以后应该会补吧… 因为某些文件似乎用的python2决定整个python2 安装python2.7 打开anaconda命令行输入 conda create --name python27 python2…

JAVAEE值网络编程(2)_TCP流套接字及通信模型、TCP网络编程及代码实例

前言 在上一节内容中&#xff0c;我们介绍了什么是套接字&#xff0c;以及使用UDP数据报套接字网络编程&#xff0c; 最后我们还介绍了Java数据报套接字通信模型以及相关代码实例。在这一节我们将会介绍TCP流套接字编程。 一、流套接字及通信模型 1.1 TCP套接字 TCP&#xff0…

云计算-高级云资源配置(Advanced Cloud Provisioning)

向Bucket添加公共访问&#xff08;Adding Public Access to Bucket&#xff09; 在模块5中&#xff0c;我们已经看到如何使用CloudFormation创建和更新一个Bucket。现在我们将进一步更新该Bucket&#xff0c;添加公共访问权限。我们在模块5中使用的模板&#xff08;third_templ…

内网安全--隧道技术代理技术

注:本文仅做技术交流,请勿非法破坏... 目录 项目: 1-Ngrok 用法 2-Frp 用法 3-Nps 用法 4-Spp 用法 工具: windows下: Proxifier(推荐~) Sockscap ccproxy Linux下: Proxychains 用法 http://t.csdnimg.cn/88Ew7 隧道技术&#xff1a;解决不出网协议上线的问…

TikTok运营必看|7大广告类型及特点

TikTok广告是品牌或创作者付费向特定目标受众展示的推广内容&#xff08;通常是全屏视频&#xff09;。TikTok 上的广告是一种社交媒体营销形式&#xff0c;通常旨在提高广告商的知名度或销售特定产品或服务。 就 TikTok广告投放而言&#xff0c;其组织层级分为三个层级&#x…

【Java】static 修饰成员方法

static 修饰成员方法 简介 应用 static 修饰成员方法 1.static 修饰成员方法2.内存原理3.main函数4.类方法的应用 1.static 修饰成员方法 测试类&#xff1a; package suziguang_d2_staticdemo;public class Test {public static void main(String[] args) {// 1.类方法使用/…

【成品设计】基于USB接口的指纹图像采集与处理系统设计

《基于USB接口的指纹图像采集与处理系统设计》 所需器件&#xff1a; STM32F429阿波罗开发板。ATK-AS608 模块指纹识别模块。USB转TTL模块。 整体功能&#xff1a; 实现指纹的采集录入。实现指纹的对比&#xff0c;并展示对比结果&#xff0c;用LED灯和蜂鸣器提示。指纹信息…

app自动识别ios或安卓手机,微信浏览器,并下载相应的apk安装包

来源是安卓下载界面显示: 来源是IOS下载界面显示: 源码 <!DOCTYPE html> <html lang="en"><head

微软新AI工具 Recall 被白帽公开锤了?

近日&#xff0c;一些网络安全研究人员演示了恶意软件是如何成功窃取 Windows Recall 工具收集到的数据。 2024年5月21日&#xff0c;微软发布全新的“CopilotPC”&#xff0c;这类 AI PC 通过与高通的最新芯片合作&#xff0c;实现了一个叫做“Recall”的功能。借助这个人工智…

5.31.8 学习深度特征以实现判别定位

1. 介绍 尽管没有对物体的位置提供监督,但卷积神经网络 (CNN) 各层的卷积单元实际上可以充当物体检测器。尽管卷积层具有这种出色的物体定位能力,但当使用全连接层进行分类时,这种能力就会丧失。最近,一些流行的全卷积神经网络,如 Network in Network (NIN) [13] 和 Goog…

Docker大学生看了都会系列(六、Dokcer容器数据卷)

系列文章目录 第一章 Docker介绍 第二章 2.1 Mac通过Homebrew安装Docker 第二章 2.2 CentOS安装Docker 第三章 Docker常用命令 第四章 常用命令实战 第五章 Docker镜像详解 第六章 Docker容器数据卷 文章目录 一、前言二、环境三、容器数据卷基本介绍3.1 什么是容器数据卷3.2 容…

nginx--centos安装

参考&#xff1a;https://blog.csdn.net/chang_chunhua/article/details/129298660 下载官网&#xff1a;https://nginx.org/ 选择稳定版本&#xff1a;stable 下载linux版本的&#xff1a; 可以选择直接下载到本地再上传到服务器相对应位置&#xff01; 同时也可以用下载地…

利用MaxKB+Ollama:搭建智能问答系统_Ubuntu部署maxkb

Docker方式&#xff0c;不建议使用 即使maxKB和ollama在同一目录下&#xff0c;API域名也显示无效。 Ollama下载网址&#xff1a;Download Ollama on Linux Linux下载&#xff1a;curl -fsSL https://ollama.com/install.sh | sh The Ollama API is now available at 127.0.…

openh264 自适应量化功能源码分析

openh264 OpenH264是一个开源的H.264/AVC视频编解码器&#xff0c;由Cisco公司发起并贡献了最初的代码基础。它提供了一个用于视频编码和解码的库&#xff0c;支持H.264视频压缩标准&#xff0c;广泛应用于视频会议、流媒体和视频存储等领域。OpenH264是实现H.264编解码功能的…

【鸿蒙】开发之页面跳转组件—实现页面跳转方法汇总!

①不同 Slice 间跳转&#xff0c;同一个 Ability 中&#xff0c;优点是方便&#xff0c;高效&#xff0c;缺点是业务逻辑复杂度受限。 button.setClickedListener(listener -> present(new SecondAbilitySlice(), new Intent()) );②使用 Intent 借助于 ElementName&#x…