矩阵连乘问题
问题描述
给定n个矩阵{A1, A2,…, An}, 其中Ai 与 Ai+1 是可乘的, i = 1, 2, …, n-1
如何确定连乘积的计算次序,使得依次次序计算矩阵连乘积所需要的数乘次数最少

package 矩阵连乘;
/** 矩阵连乘问题问题描述给定n个矩阵{A1, A2,…, An}, 其中Ai 与 Ai+1 是可乘的, i = 1, 2, …, n-1如何确定连乘积的计算次序,使得依次次序计算矩阵连乘积所需要的数乘次数最少*/
public class MatrixTest {/**
* 求解最优值
* p: 矩阵维数信息数组
* m: 存放最优值数组, 上三角形式
* s: 存放分割位置下标的数组
* m[i][j]:计算A[i,j]所需要的最少数乘次数
* 返回最优值
**/public static int matrixChain(int p[], int m[][], int s[][]) {int n = p.length - 1;for (int i = 1; i <= n; i++)// 本身为0m[i][i] = 0;  // 初始化二维数组for (int r = 2; r <= n; r++) {for (int i = 1; i <= n - r + 1; i++) { int j = i + r - 1;// 先以i进行划分m[i][j] = m[i + 1][j] + p[i - 1] * p[i] * p[j];  // 求出Ai到Aj的连乘s[i][j] = i;  // 记录划分位置for (int k = i + 1; k < j; k++) {// 寻找是否有可优化的分割点int t = m[i][k] + m[k + 1][j] + p[i - 1] * p[k] * p[j];  // 公式if (t < m[i][j]) { m[i][j] = t;s[i][j] = k;}}}}return m[1][n];}/*** 输出 A[i:j] 的最优计算次序* i、j: 连乘矩阵下标* s: 存放分割位置下标的数组**/public static void traceback(int i, int j, int[][] s) {// 输出A[i:j] 的最优计算次序if (i == j) {// 递归出口System.out.print("A"+i);return;} else {System.out.print("(");// 递归输出左边traceback(i, s[i][j], s);// 递归输出右边traceback(s[i][j] + 1, j, s);System.out.print(")");}}public static void main(String[] args) {int[] p = new int[]{5, 7, 4, 3, 5};int[][] m = new int[p.length][p.length];int[][] s = new int[p.length][p.length];System.out.println("最优值为: "+matrixChain(p, m, s));traceback(1, p.length-1, s);}}

矩阵连乘 java算法实现相关推荐

  1. java矩阵连乘_算法设计与分析——矩阵连乘问题(动态规划)

    一.问题描述 引出问题之前我们先来复习一下矩阵乘积的标准算法. int ra,ca;//矩阵A的行数和列数 int rb,cb;//矩阵B的行数和列数 voidmatrixMultiply() {fo ...

  2. 两个矩阵是否相交的算法_刷透近200道数据结构与算法,成功加冕“题王”,挤进梦中的字节!...

    不管是学生还是已经工作的人,我想彼此都有一个相同的梦想:进大厂! 眼看着2020年还有个三十来天就要完美收尾了,那么如何才能在未来三个月弯道超车赶上"金三银四的春招",进入梦寐以求 ...

  3. 我整理了50道经典Java算法题,直接进了字节跳动!!

    写在前面 最近,很多小伙伴都想进入字节跳动这个快速发展的公司,而字节跳动对于算法的要求比较高.于是乎,有些小伙伴问我能否整理一些基础的算法题,帮助他们提升下基础算法能力.我:没问题啊!于是,经过半个多 ...

  4. Java算法学习:蓝桥杯——地宫寻宝(DFS+动态规划—记忆型递归)

    Java算法学习:蓝桥杯--地宫寻宝(DFS✖记忆型递归) 题目: 标题:地宫取宝X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签.地宫的入口在左上角,出 ...

  5. 格雷通路 算法 java,Java算法与数据结构教程

    北上广容不下肉身, 三四线放不下灵魂, 程序员里没有穷人, 有一种土豪叫 算法工程师. 程序 = 数据结构 + 算法 程序是为了解决实际问题而存在的.然而为了解决问题,必定会使用到某些数据结构以及设计 ...

  6. Java算法题:Z字形变换

    Java算法题:Z字形变换 将一个给定字符串 s 根据给定的行数 numRows ,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "PAYPALISHIRING" 行 ...

  7. 一些常用的java算法练习

    一些常用的java算法练习 如果有出错的程序请欢迎指出 目录 文章目录 一些常用的java算法练习 目录 练习题目 1.题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四 ...

  8. java算法----排序----(6)希尔排序(最小增量排序)

    1 package log; 2 3 public class Test4 { 4 5 /** 6 * java算法---希尔排序(最小增量排序) 7 * 8 * @param args 9 */ 1 ...

  9. 希尔排序的java算法_Java算法系列篇 【希尔排序】

    什么? 搞Java不会算法? 由于个人兴趣原因以及工作所需,最近了解Java算法的相关案例 及时分享 感兴趣的欢迎交流 希尔排序 描述: 基本思想:先将整个待排序的记录序列分割成为若干子序列分别进行直 ...

最新文章

  1. java 中向文本写入和读取hashmap_就靠这一篇HashMap的讲解,我与头条面试官聊了一个小时。...
  2. 谷歌chrome浏览器的源码分析(三)
  3. Linux内核驱动之延时---内核超时处理【转】
  4. DM8168学习--USB的over-current 问题总结
  5. 第二十一章:变换(三)
  6. 工作流实战_10_flowable 流程实例的删除
  7. 两文本一图片android,Android富文本编辑器(二):图文混排以及图片上传处理
  8. 计算机十进制例子,verilog给你举个最简单的例子:以十进制计算为例:14
  9. rsync实现同步文件
  10. php mysql 嵌套查询_MYSQL数据库MySQL嵌套查询实例详解
  11. 传说中的世界500强面试题-反应能力
  12. 车牌号识别依托OCR文字识别核心
  13. 转载[UGUI]深入理解Canvas Scaler
  14. Todd's Matlab讲义第6讲:割线法
  15. SpringBoot整合JDBC的Druid数据源
  16. cmd 连接 远程数据库
  17. 关于SEO与搜索引擎排名现状分析与SEO去向
  18. 相对地址和绝对地址的理解
  19. fprint函数与print函数
  20. 【git】eclipse使用git的过程中的问题,提示rejected - non-fast-forward错误的解决办法

热门文章

  1. 第二章,python--numpy常用函数详解
  2. 我的Java代码::简单篇
  3. 备份数据迁移到云端的七种方式
  4. JDY-10M BLE组网模块介绍
  5. 基于jsp+mysql+Spring+SpringMVC+mybatis的ssm在线培训教育平台
  6. 投资理财-全职投资的一些思考
  7. 基于 Amazon SageMaker 构建细粒度情感分析应用【附部署视频】
  8. 如果串口驱动有问题,怎么调
  9. 由低分辨率栅格插值为高分辨率栅格的ArcGIS处理过程
  10. DotNetBar 学习笔记