您的位置:首页 > 其它

算法之矩阵链乘法问题

2008-10-23 16:27 344 查看
package com.eshore.sweetop.dynamicprogramming;

public class MatrixChain {
    public static void order(int[] p) {
        int n = p.length - 1;
        int[][] m = new int

;
        int[][] s = new int

;
        for (int i = 0; i < n; i++) {
            m[i][i] = 0;
        }

        for (int l = 2; l < n + 1; l++) {
            for (int i = 0; i < n - l + 1; i++) {
                int j = i + l - 1;
                m[i][j] = Integer.MAX_VALUE;
                for (int k = i; k < j; k++) {
                    int q = m[i][k] + m[k + 1][j] + p[i] * p[k + 1] * p[j + 1];
                    if (q < m[i][j]) {
                        m[i][j] = q;
                        s[i][j] = k;
                    }
                }
            }
        }

        Matrix.halfdisplay(m);
        
        parens(s,0,s.length-1);
    }

    public static void parens(int[][] s, int i, int j) {
        if (i == j) {
            System.out.print("A" + (i + 1));
        } else {
            System.out.print("(");
            parens(s,i,s[i][j]);
            parens(s,s[i][j]+1,j);
            System.out.print(")");
        }
    }

    public static void main(String[] args) {
//      int[] p = { 30, 35, 15, 5, 10, 20, 25 };
        int[] p = {5,10,3,12,5,50,6};
        MatrixChain.order(p);
    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: