矩阵连乘问题 Python 动态规划
1.1 构造最优值矩阵 ,并将断开位置记录在断开位置矩阵中
def matrixChain():
"""
计算最优值关系矩阵
:return: None
"""
for i in range(2, n + 1): # 对角线
for r in range(1, n - i + 2): # 行
c = r + i - 1 # 列
# 找到 m[r][c] 的最小值并计入列表
m[r][c] = m[r][r] + m[r + 1][c] + p[r - 1] * p[r] * p[c]
s[r][c] = r
# 从 r+1 道 c-1 寻找 m[r][c] 的最小值
for j in range(r + 1, c):
t = m[r][j] + m[j + 1][c] + p[r - 1] * p[j] * p[c]
if t < m[r][c]:
m[r][c] = t
# 将子序列 r-c 段中 j 的位置存入 s ,此处断开可以得到最优解
s[r][c] = j
1.2 根据断开位置矩阵计算得出最优解
def traceBack(r: int, c: int) -> None:
"""
根据 s 记录的各个子段的最优解,将其输出
:param r: 行
:param c: 列
:return: None
"""
if r == c:
return
traceBack(r, s[r][c])
traceBack(s[r][c] + 1, c)
# 描述括号位置
print(f' 左括号 : A{s[r][c]} 之前 \t 与之对应的右括号 : A{c} 之后 ')
2. 算法实现 - 完整代码
print(' 请输入连乘矩阵的维数: ')
print(' 示例: A[2*5],B[5*10],C[10*2]')
print(' 应输入: 2 5 10 2( 使用空格隔开 )')
p = list(map(int, input().split())) #外汇跟单gendan5.com 获取用户输入连乘矩阵维数
n = len(p) - 1 # 计算用户输入矩阵个数
m = [[0 for i in range(n + 1)] for j in range(n + 1)] # 初始化最优解列表
s = [[0 for i in range(n + 1)] for j in range(n + 1)] # 初始化断开位置列表
def matrixChain():
"""
计算最优值关系矩阵
:return: None
"""
for i in range(2, n + 1): # 对角线
for r in range(1, n - i + 2): # 行
c = r + i - 1 # 列
# 找到 m[r][c] 的最小值并计入列表
m[r][c] = m[r][r] + m[r + 1][c] + p[r - 1] * p[r] * p[c]
s[r][c] = r
# 从 r+1 道 c-1 寻找 m[r][c] 的最小值
for j in range(r + 1, c):
t = m[r][j] + m[j + 1][c] + p[r - 1] * p[j] * p[c]
if t < m[r][c]:
m[r][c] = t
# 将子序列 r-c 段中 j 的位置存入 s ,此处断开可以得到最优解
s[r][c] = j
def traceBack(r: int, c: int) -> None:
"""
根据 s 记录的各个子段的最优解,将其输出
:param r: 行
:param c: 列
:return: None
"""
if r == c:
return
traceBack(r, s[r][c])
traceBack(s[r][c] + 1, c)
# 描述括号位置
print(f' 左括号 : A{s[r][c]} 之前 \t 与之对应的右括号 : A{c} 之后 ')
matrixChain()
traceBack(1, n)
print(f' 乘法次数 : {m[1][n]}')
矩阵连乘问题 Python 动态规划相关推荐
- python连乘函数_动态规划之矩阵连乘问题Python实现方法
本文实例讲述了动态规划之矩阵连乘问题Python实现方法.分享给大家供大家参考,具体如下: 给定n个矩阵{A1,A2,-,An},其中Ai与Ai+1是可乘的,i=1,2 ,-,n-1.如何确定计算矩阵 ...
- 矩阵连乘算法代码JAVA_矩阵连乘问题的动态规划算法(java)
/** * 下面是矩阵连乘问题的动态规划算法 * 假设有6个矩阵: * A1 A2A3 A4 A5A6 * 30*35 35*15 15*5 5*10 10*20 20*25 则matrixChain ...
- 混淆矩阵是什么?Python多分类的混淆矩阵计算及可视化(包含原始混淆矩阵及归一化的混淆矩阵):基于skelarn框架iris数据集
混淆矩阵是什么?Python多分类的混淆矩阵计算及可视化(包含原始混淆矩阵及归一化的混淆矩阵):基于skelarn框架iris数据集 目录
- 矩阵相乘的strassen算法_矩阵乘法的Strassen算法+动态规划算法(矩阵链相乘和硬币问题)...
矩阵乘法的Strassen 这个算法就是在矩阵乘法中采用分治法,能够有效的提高算法的效率. 先来看看咱们在高等代数中学的普通矩阵的乘法 两个矩阵相乘 上边这种普通求解方法的复杂度为: O(n3) 也称 ...
- python实现矩阵叉乘_矩阵乘法的纯Python实现 | 离开Python库!!
点击关注我哦 一篇文章带你了解矩阵乘法的纯Python实现 在<这篇文章>中,我们有简单提到"矩阵乘法"的相关知识,如果你不记得了,可以复习一下这张图片. 想起来了没? ...
- 剑指offer 矩阵中的路径 @python
剑指offer 矩阵中的路径 @python 题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向 ...
- 矩阵乘法的纯Python实现 | 离开Python库!!
点击关注我哦 一篇文章带你了解矩阵乘法的纯Python实现 在<这篇文章>中,我们有简单提到"矩阵乘法"的相关知识,如果你不记得了,可以复习一下这张图片. 想起来了没? ...
- python实现录音小程序 界面_python怎么对矩阵添加一列python实现录音小程序
本文为大家分享了python实现录音小程序的具体代码,供大家参考,具体内容如下 学习目标: 学习电脑网从python实现录音小程序分析来看,对python实现录音小程序的结果.掌握python的pya ...
- 模型效果评价—混淆矩阵(原理及Python实现)
对于分类模型,在建立好模型后,我们想对模型进行评价,常见的指标有混淆矩阵.KS曲线.ROC曲线.AUC面积等.也可以自己定义函数,把模型结果分割成n(100)份,计算top1的准确率.覆盖率. ...
最新文章
- array.array python yhzf
- PushYourself
- 微型计算机引脚,微型计算机硬件基础8086引脚.doc
- 数学狂想曲(十二)——熵(2), 阴影面积, 肺炎版《黄冈密卷》
- 2021 年前端趋势预测
- 创建数据库python: can‘t open file ‘manage.py‘: [Errno 2] No such file or directory报错
- LeetCode-Maximal Rectangle-最大矩形
- ElasticSearch面试 - es 写入数据的工作原理是什么啊?
- python函数——形参中的:*args和**kwargs
- windos 为什么会突然服务停止了_女生为什么会突然说分手?
- python爬取快手视频并批量下载
- Verilog语法练习
- 4.re包学习(正则表达式)
- SUSE收购Rancher Labs,云原生时代大幕拉开
- 改变磁盘格式gpt_改变游戏规则或结束游戏? 准备好参加GPT-3
- BUUCTF [WUSTCTF2020]alison_likes_jojo
- 浙大翁恺pat练习题_中国大学MOOC-翁恺-C语言-PAT习题及解答-第二周
- 最新计算机毕业设计选题推荐 - 毕设选题建议
- 涨知识了,原来微信可以一键找到对方位置
- python读取文件夹下所有图片
热门文章
- linux目录表及功能n鸟哥,鸟哥linux私房菜_笔记_Linux的文件权限与目录配置
- 远程无法连接svn服务器失败_windows vscode 远程连接linux服务器
- dg oracle 切换模式_oracle dg切换操作示例
- matlab根据成绩划分等级_学生成绩分等级:ABCD,分优秀 良好合格 不及格,一组公式即可解决...
- layui数据表格自定义复选框表头_layui中table表头样式修改方法
- 源服务器信息,软件源搭建
- 3dmax挤出制作窗花_「教程」3DMAX制作藤编家具模型,超实用教程,收藏备用
- 支付二维码php能实现吗_(实用篇)微信支付扫码支付php版
- ubuntu14.04下apt-get install出现E: Sub-process /usr/bin/dpkg returned an error code 解决方法
- 神奇的JavaScript之正则