#include<stdio.h>
#include<stdlib.h>
#include<math.h>
void print(int(*n)[7]);
void MatrixChain(int*p,int n,int(*m)[7],int(*s)[7]);
main(int argc, char** argv)
{
int a1[30][35],a2[35][15],a3[15][5],a4[5][10],a5[10][20],a6[20][25];
int p[7] = {30,35,15,5,10,20,25};
int n = 6;
int m[7][7],s[7][7];//m矩阵表示连乘的运算次数,s表示括号的位置
MatrixChain(p,n,m,s);
print(m);
print(s);
}
void print(int (*n)[7]){
int i ,j;
for(i = 0;i < 7;i++){
for(j = 0;j < 7;j++){
printf("%d\t",n[i][j]);
}
printf("\n");
}
}
void MatrixChain(int *p,int n, int (*m)[7],int (*s)[7]){
int i ,k ,r;
for(i = 1;i <= n ;i++){
m[i][i] = 0;
}
for(r = 2;r <= n;r++){//r表示矩阵连乘的个数,最小为2
for(i = 1;i <= n-r+1;i++){//i代表起始位置,j代表最终位置
int j = i+r-1;
m[i][j] = m[i+1][j]+p[i-1]*p[i]*p[j];
s[i][j] = i;
for(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;
}
}
}
}
}相关推荐
快速计算----矩阵连乘--DP
给定 n 个矩阵{A1,A2,A3,…,An},其中,Ai 和 Ai+1(i=1,2,…,n−1)是可乘的。用加括号的方法表示矩阵连乘的次序,不同的计算次序计算量(乘法次数)是不同的,找出一种加括号的方法,使得矩阵连乘的计算量最小例如:A1 是 M5×10 的矩阵;A2 是 M10×100 的矩阵;A3 是 M100×2 的矩阵。那么有两种加括号的方法:(1)(A1 A2)A3;(2)A1(A2 ...
矩阵连乘问题实现(最佳加括号方式-动态规划算法)
矩阵连乘问题分析和实现用于动态规划 最佳加括号方式-动态规划算法
矩阵连乘--动态规划
动态规划算法解矩阵连乘问题 1 用动态规划算法解矩阵连乘问题 (1)问题的描述 给定n个矩阵{A1,A2,…,An},其中Ai与Ai+1是可乘的,i=1,2,…,n-1。要算出这n个矩阵的连乘积A1A2…An。由于矩阵乘法满足结合律,故计算矩阵的连乘积可以有许多不同的计算次序。这种计算次序可以用加括号的方式来确定。若一个矩阵连乘积的计算次序完全确定,也就是说该连乘积已完全加括号,
矩阵连乘积的加括号方式数
给定n个矩阵{A1,…,An},其中Ai和Ai+1可乘,i=1,2,…,n-1。考察矩阵连乘积加括弧的方式数。 如四个矩阵连乘积A1A2A3A4,共有五种不同的加括弧方式: ( A1 ( A2 ( A3 A4 ) ) ) ( A1 ( ( A2 A3 ) A4 ) ) ( ( A1A2 ) ( A3 A4 ) ) ( A1 ( A2 A3 ) A4 ) ( ( ( A1 A2 ) A3 ) A4 )
矩阵链乘法问题(给A1A2A3...An加括号,使之乘法次数最小)动态规划问题C++实现...
// 矩阵链乘法问题.cpp : Defines the entry point for the console application. //给A1A2A3...An加括号,使之乘法次数最小 //动态规划问题 #include "stdafx.h" #include<iostream> #define N 100 #define Infinity 65535 using...
矩阵连乘问题
给定n个矩阵A1,A2.......An,其中Ai与Ai+1是可乘的。 由于矩阵的乘法满足结合律,故计算矩阵的连乘积可以有许多不同的计算次序。这中计算次序可以用加括号的方式来确定。例如,矩阵连乘积A1A2A3A4可以有一下5种不同的完全加括号方式: (A1(A2(A3A4))) (A1((A2A3)A4)) ((A1A2)(A3A4)) ((A1(
算法之动态规划-矩阵链相乘(matrix-chain multiplication)
Matrix-chain multiplication给定一串矩阵 A1,A2...AnA1,A2...An,计算矩阵的值:A1A2A3..AnA_1A_2A_3..A_n。对于这串矩阵序列,不同的加括号方式,会导致截然不同的计算量。我们需要做的就是计算出如何加括号,达到最少计算量。使用动态规划求解first step: Characterize the structure of an optima
学习日历day07 动态规划-矩阵连乘问题(笔记)
以下为观看b站up四七777777的动态规划 矩阵连乘问题视频后做的相关笔记,有不懂的uu可以上b站观看相关视频。
矩阵连乘算法思想
(1)问题的描述 给定n个矩阵{A1,A2,…,An},其中Ai与Ai+1是可乘的,i=1,2,…,n-1。要算出这n个矩阵的连乘积A1A2…An。由于矩阵乘法满足结合律,故计算矩阵的连乘积可以有许多不同的计算次序。这种计算次序可以用加括号的方式来确定。若一个矩阵连乘积的计算次序完全确定,也就是说该连乘积已完全加括号,则可以依此次序反复调用2个矩阵相乘的标准算法计算出矩阵连乘积。完全加括号的矩阵
矩阵连乘问题---算法分析之动态规划
动态规划方法解决矩阵连乘问题,即寻求多个矩阵连乘时的最好的加括号方式使得总的乘法两最小; 可以设定矩阵个数,手动输入矩阵的阶,显示动态规划算法的表格,即乘法量和括号信息; 多文档,C++6.0
矩阵连乘积问题 动态规划算法
矩阵连乘积问题 动态规划算法动态规划动态规划问题的特征动态规划法的步骤矩阵连乘积问题分析动态规划法 求解分析最优解结构建立递归关系计算最优值算法计算矩阵连乘积的动态规划算法构造最优解 动态规划 动态规划问题的特征 动态规划算法的有效性依赖于问题本身所具有的两个重要性质: 1.最优子结构 当问题的最优解包含了其子问题的最优解时,称该问题具有最优子结构性质 2.子问题重叠 在使用递归算法自顶向下求解问题时,产生的子问题并不总是新问题,有些子问题被反复计算过,动态规划算法(自底向上)正是利用了子问题重叠性质,对
矩阵连乘
用加括号的方法表示矩阵连乘的次序,不同的计算次序计算量(乘法次数)是不同的,找出一种加括号的方法,使得矩阵连乘的计算量最小。时间复杂度:语句 t=m[i][k] + m[k+1][j] + p[i−1]*p[k]*p[j],在3层for循环中嵌套,该语句的执行次数为O(n3),时间复杂度为O(n3)。Ak),(Ak+1Ak+2…空间复杂度:该程序的输入数据的数组为p[],辅助数组m[][]、s[][],因此空间复杂度为O(n2)。如果两个矩阵,第1个矩阵的列等于第2个矩阵的行,那么这两个矩阵是可乘的。
动态规划——矩阵连乘积问题(个人学习用)
(1).找出最优解的性质(2).动态规划方程(3).自底向上计算最优值。
动态规划--矩阵连乘
假期 2020.01.19 题目描述 给定 n 个矩阵{A1,A2,A3,A4,…,An},其中,Ai,A(i+1)( i = 1,2,…,n - 1)是可乘的。用加括号的方法表示矩阵连乘得次序,不同的计算次序计算量是不一样的,找出一种加括号的方法,使得连乘的计算量最小。 思路分析 相信都直到矩阵乘法是实现的,这儿就不赘诉。而连乘就是多个矩阵相乘的运算,如下图: 可以看出不同的运算次序的运...
矩阵连乘 动态规划(转载)
<br />一、问题描述<br /> 给定n个矩阵{A1,A2,…,An},其中Ai与Ai+1是可乘的,i=1,2,…,n-1。要算出这n个矩阵的连乘积A1A2…An。由于矩阵乘法满足结合律,故计算矩阵的连乘积可以有许多不同的计算次序。这种计算次序可以用加括号的方式来确定。若一个矩阵连乘积的计算次序完全确定,也就是说该连乘积已完全加括号,则可以依此次序反复调用2个矩阵相乘的标准算法计算出矩阵连乘积。完全加括号的矩阵连乘积可递归地定义为:<br /> (1)单个矩阵是完全加括号的
4600


&spm=1001.2101.3001.11974&articleId=51043989&d=1&t=3&u=b025e8cf1a374b5e8966ee43e1d46c6b)

被折叠的 条评论
为什么被折叠?



