算法设计与分析/数据结构与算法实验3:矩阵连乘问题

简介: 算法设计与分析/数据结构与算法实验3:矩阵连乘问题

1.实验目的

(1)掌握动态规划法的处理思路与算法框架。

(2)掌握应用动态规划法解决具体问题的方法。

(3)掌握动态规划法的广泛应用。

2.实验内容

(1)问题描述

image.png

(2)输入

image.png


(3)输出

输出分为两行。

第一行输出一个整数,表示矩阵在以最优计算次序求解连乘积时,所需要计算的次数。

第二行输出求解矩阵连乘积的最优次序。

3.问题实例分析


image.png

0
0
0
0
0


image.png

0 1500
0 750
0 750
0 1500
0


image.png

0 1500 1750
0 750 1000
0 750 3000
0 1500
0

image.png

0 1500 1750 1500
0 750 1000 1750
0 750 3000
0 1500
0

image.png

0 1500 1750 1500 4500
0 750 1000 1750
0 750 3000
0 1500
0

image.png


0 1 1 1 4
0 2 3 4
0 3 4
0 4
0

image.png


4.算法描述及说明

正如第3节问题实例分析所述,算法的整体流程如下:

image.png


5.算法正确性分析

image.png


7.运行结果展示及其说明

测试样例使用了两组。对于每一组测试样例,都正确地输出了计算次数与次序,并在最后给出了最优的加括号的方案。

8.心得体会

9.程序源代码

#include<iostream>
const int N = 1005;
long long dp[N][N];
long long p[N];
int pos[N][N];
int posl[N];//记录左括号位置
int posr[N];//记录右括号位置
using namespace std;
void traceback(int i,int j) {
  if (i == j)
    return;
  traceback(i, pos[i][j]);
  traceback(pos[i][j] + 1, j);
  posl[i]++;
  posr[j]++;
  cout << "Multiply A" << i << "," << pos[i][j] << " and A" << pos[i][j] + 1 << "," << j<<endl;
}
int main() {
  int n;
  cin >> n;
  for (int i = 0; i <= n; i++)
    cin >> p[i];
  for (int i = 1; i <= n; i++)
    dp[i][i] = 0;
  for (int len = 2; len <= n; len++) {
    for (int i = 1; i <= n - len + 1; i++) {
      int j = i + len - 1;
      dp[i][j] = dp[i + 1][j] + p[i - 1] * p[i] * p[j];
      pos[i][j] = i;
      for (int k = i + 1; k < j; k++) {
        int t = dp[i][k] + dp[k + 1][j] + p[i - 1] * p[k] * p[j];
        if (t < dp[i][j]) {
          dp[i][j] = t;
          pos[i][j] = k;
        }
      }
    }
  }
  cout << "计算次数" << dp[1][n] << endl;
  traceback(1, n);
  for (int i = 1; i <= n; i++) {
    for (int j = 0; j < posl[i]; j++)
      cout << '(';
    cout << 'A' << i ;
    for (int j = 0; j < posr[i]; j++)
      cout << ')';
  }
}


目录
打赏
0
0
0
0
54
分享
相关文章
境内深度合成服务算法备案通过名单分析报告
本报告基于《境内深度合成服务算法备案通过名单》,分析了2023年6月至2025年3月公布的10批备案数据,涵盖属地分布、行业应用及产品形式等多个维度。报告显示,深度合成算法主要集中于经济发达地区,如北京、广东、上海等地,涉及教育、医疗、金融、娱乐等多行业。未来趋势显示技术将向多模态融合、行业定制化和安全合规方向发展。建议企业加强技术研发、拓展应用场景、关注政策动态,以在深度合成领域抢占先机。此分析旨在为企业提供参考,助力把握技术发展机遇。
境内深度合成服务算法备案通过名单分析报告
从公布的前十一批其他算法备案通过名单分析
2025年3月12日,国家网信办发布算法备案信息,深度合成算法通过395款,其他算法45款。前10次备案中,深度合成算法累计3234款,其他类别647款。个性化推送类占比49%,涵盖电商、资讯、视频推荐;检索过滤类占31.53%,用于搜索优化和内容安全;调度决策类占9.12%,集中在物流配送等;排序精选类占8.81%,生成合成类占1.55%。应用领域包括电商、社交媒体、物流、金融、医疗等,互联网科技企业主导,技术向垂直行业渗透,内容安全和多模态技术成新增长点。未来大模型检索和多模态生成或成重点。
从公布的前十一批其他算法备案通过名单分析
|
28天前
|
算法系列之数据结构-二叉树
树是一种重要的非线性数据结构,广泛应用于各种算法和应用中。本文介绍了树的基本概念、常见类型(如二叉树、满二叉树、完全二叉树、平衡二叉树、B树等)及其在Java中的实现。通过递归方法实现了二叉树的前序、中序、后序和层次遍历,并展示了具体的代码示例和运行结果。掌握树结构有助于提高编程能力,优化算法设计。
47 9
 算法系列之数据结构-二叉树
|
25天前
|
算法系列之数据结构-Huffman树
Huffman树(哈夫曼树)又称最优二叉树,是一种带权路径长度最短的二叉树,常用于信息传输、数据压缩等方面。它的构造基于字符出现的频率,通过将频率较低的字符组合在一起,最终形成一棵树。在Huffman树中,每个叶节点代表一个字符,而每个字符的编码则是从根节点到叶节点的路径所对应的二进制序列。
40 3
 算法系列之数据结构-Huffman树
|
27天前
|
算法系列之数据结构-二叉搜索树
二叉查找树(Binary Search Tree,简称BST)是一种常用的数据结构,它能够高效地进行查找、插入和删除操作。二叉查找树的特点是,对于树中的每个节点,其左子树中的所有节点都小于该节点,而右子树中的所有节点都大于该节点。
66 22
从第十批算法备案通过名单中分析算法的属地占比、行业及应用情况
2025年3月12日,国家网信办公布第十批深度合成算法通过名单,共395款。主要分布在广东、北京、上海、浙江等地,占比超80%,涵盖智能对话、图像生成、文本生成等多行业。典型应用包括医疗、教育、金融等领域,如觅健医疗内容生成算法、匠邦AI智能生成合成算法等。服务角色以面向用户为主,技术趋势为多模态融合与垂直领域专业化。
企业监控软件中 Go 语言哈希表算法的应用研究与分析
在数字化时代,企业监控软件对企业的稳定运营至关重要。哈希表(散列表)作为高效的数据结构,广泛应用于企业监控中,如设备状态管理、数据分类和缓存机制。Go 语言中的 map 实现了哈希表,能快速处理海量监控数据,确保实时准确反映设备状态,提升系统性能,助力企业实现智能化管理。
36 3
从第九批深度合成备案通过公示名单分析算法备案属地、行业及应用领域占比
2024年12月20日,中央网信办公布第九批深度合成算法名单。分析显示,教育、智能对话、医疗健康和图像生成为核心应用领域。文本生成占比最高(57.56%),涵盖智能客服、法律咨询等;图像/视频生成次之(27.32%),应用于广告设计、影视制作等。北京、广东、浙江等地技术集中度高,多模态融合成未来重点。垂直行业如医疗、教育、金融加速引入AI,提升效率与用户体验。
基于免疫算法的最优物流仓储点选址方案MATLAB仿真
本程序基于免疫算法实现物流仓储点选址优化,并通过MATLAB 2022A仿真展示结果。核心代码包括收敛曲线绘制、最优派送路线规划及可视化。算法模拟生物免疫系统,通过多样性生成、亲和力评价、选择、克隆、变异和抑制机制,高效搜索最优解。解决了物流仓储点选址这一复杂多目标优化问题,显著提升物流效率与服务质量。附完整无水印运行结果图示。
基于免疫算法的最优物流仓储点选址方案MATLAB仿真
基于GA遗传优化TCN时间卷积神经网络时间序列预测算法matlab仿真
本内容介绍了一种基于遗传算法优化的时间卷积神经网络(TCN)用于时间序列预测的方法。算法运行于 Matlab2022a,完整程序无水印,附带核心代码、中文注释及操作视频。TCN通过因果卷积层与残差连接学习时间序列复杂特征,但其性能依赖超参数设置。遗传算法通过对种群迭代优化,确定最佳超参数组合,提升预测精度。此方法适用于金融、气象等领域,实现更准确可靠的未来趋势预测。

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等