矩阵连乘的动态规划解法
来源:互联网 发布:js禁止复制文字 编辑:程序博客网 时间:2024/05/14 07:35
- 写出矩阵连乘的自底向上非递归的动态规划算法 或自顶向下递归的动态规划
算法(备忘录方法) 。
输入: 先输入 矩阵连乘的 个数 n , 然后依次手动输入(! 不能随机生成! ) 矩阵的
维数 pi) (数字) 。 注意,6 个矩阵,需输 7 个维数值。
输出:矩阵连乘的次序,如 :((A1(A2A3))((A4A5A6)) 。
示例:输入:6 30 35 15 5 10 20 25 ,输出:((A1(A2A3))((A4A5)A6))
package com.Test;import java.util.Scanner;public class second { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int m[][] = new int[n + 1][n + 1]; int s[][] = new int[n + 1][n + 1]; int p[] = new int[n + 1]; for (int i = 0; i < n + 1; i++) { p[i] = sc.nextInt(); } jc(p, n, m, s); System.out.println(cx(1, n, s)); } private static String cx(int i, int j, int[][] s) { // TODO 自动生成的方法存根 if (i == j) return "A" + i; else return "(" + cx(i, s[i][j], s) + cx(s[i][j] + 1, j, s) + ")"; } private static void jc(int[] p, int n, int[][] m, int[][] s) { // TODO 自动生成的方法存根 for (int i = 1; i <= n; i++) {// 单个矩阵乘的次数为0 m[i][i] = 0; } for (int r = 2; r <= n; r++) {// r为每次循环矩阵的长度。 for (int i = 1; i <= n - r + 1; i++) {// 从1到n-r+1循环取矩阵长度r时的矩阵 int j = r + i - 1; m[i][j] = m[i][i]+m[i + 1][j] + p[i - 1] * p[i] * p[j];// 取第一个可取位置,这里肯定是第一个, //例如对(A1~A2),则i=1,j=2,下面一行的m[1][2]=m[1][1]+m[2][2]+p[0]*p[1]*p[3],即A1A2 //例如对(A2~A4),则i=2,j=4,下面一行的m[2][4]=m[2][2]+m[3][4]+p[1]*p[2]*p[4],即A2(A3A4) s[i][j] = i; // 断开位置为i for (int k = i + 1; k < j; k++) {//k是从i开始的,所以这里是i+1开始分段;然后,k<j,因为这里i,j表示的是Ai*Aj,这里只是分段成(Ai*Ak) + (Ak+1 *Aj) //,所以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; } } } } }}
参考自:
http://blog.csdn.net/tmljs1988/article/details/6925631
http://blog.sina.com.cn/s/blog_64018c250100s123.html
http://www.tuicool.com/articles/67Nz6f2
阅读全文
0 0
- 矩阵连乘的动态规划解法
- 矩阵连乘问题的动态规划解法
- 矩阵连乘的动态规划求解
- 矩阵连乘的动态规划算法
- 矩阵连乘 动态规划
- 矩阵连乘 动态规划
- 矩阵连乘-动态规划
- 动态规划-矩阵连乘
- 动态规划 - 矩阵连乘
- 矩阵连乘--动态规划
- 矩阵连乘--动态规划
- 矩阵连乘 (动态规划)
- 矩阵连乘,动态规划
- 矩阵连乘(动态规划)
- 矩阵连乘----动态规划
- 动态规划--矩阵连乘
- 矩阵连乘问题的非动态解法
- 矩阵连乘的JAVA实现(动态规划)
- Valgrind用户手册
- 【bzoj4390】[Usaco2015 dec]Max Flow
- 基于vue2框架的机器人自动回复mini-project
- C语言实现个人所得税计算
- android之数据库的增删改查
- 矩阵连乘的动态规划解法
- 学习笔记——JAVA设计模式<4>原型模式
- Valgrind概述
- Spring MVC 思想
- JDBC(2):事务,批次处理文件,处理大文件
- 【Python】第一次使用Python(python基础教程)
- c语言一维数组做参数传递给函数:
- 文本复制
- PES,TS,PS,RTP等流的打包格式解析之PS流