矩阵连乘的动态规划解法

来源:互联网 发布:js禁止复制文字 编辑:程序博客网 时间:2024/05/14 07:35
  1. 写出矩阵连乘的自底向上非递归的动态规划算法 或自顶向下递归的动态规划
    算法(备忘录方法) 。
    输入: 先输入 矩阵连乘的 个数 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

原创粉丝点击