动态规划-----矩阵连乘(java)

(写在前面)哦豁,一天搞一个算法。( ̄ω ̄;)

一、问题

设有6个矩阵A1A2A3A4A5A6相乘,即n=6,然后它的维数可组成矩阵p[ ](p的长度为n+1)。问题为矩阵数乘最小次数为多少?
在这里插入图片描述

二、图示

下面的图反应了不能使用递归的原因,因为大问题包含小问题,递归算法许多子问题会被重复计算,递归算法的时间复杂度为O(2^n),灾难级别的复杂度。
在这里插入图片描述

三、

引出动态规划,每个子问题只计算一次,计算后存起来,用到时再调用。动态规划算法的时间复杂度为O(n^3)。

四、java代码


代码有详细解释!!

public class MatrixChain {
   
   
    public static void MatrixChain(int[] p, int n, int[][] m, int[][] s) {
   
   
        /*①p为矩阵的行与列数,注意若矩阵的个数为n个,则p.length=n+1,两两相乘,中间有n-1个,加上两边2个,共n+1个,
        即数组p的长度为n+1。这里p[]存储p[0]、p[1]、p[2]......p[n]。
        ②n为矩阵的个数。
        ③m[i][j]为A[i:j]的最少数乘次数,即AiAi+1......Aj连乘的最少次数。
        ④s[][]为存放插入点位置的*/
        for (int i = 1; i <= n; i++) {
   
   //把对角线的都设为0,因为单个矩阵与自己无法相乘。
            m[i][i] = 0;
        }
        for (int r = 2; r <= n; r++) {
   
   //① r为矩阵连乘的长度,从2开始,好戏开始了。② r的引入也改变了i与j的下标。
            for (int i = 1; i <= n - r + 1; i++) {
   
   //确定i的下标,这里减一是因为r=2。
                int j 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值