矩阵链乘法
来源:互联网 发布:京东杜爽离职知乎 编辑:程序博客网 时间:2024/06/05 06:58
1.C++实现:
#include<bits/stdc++.h>using namespace std;//int p[] = {30,35,15,5,10,20,25};int p1[] = { 2,10,3,12,5,50,6};void print(int s[][7], int i, int j){if(i == j){cout<<"A"<<i;}else{cout<<"(";print(s, i, s[i][j]);print(s, s[i][j]+1, j);cout<<")";}}void matrix_multiply(int p1[],int length){int n = length - 1;int m[n+1][n+1];int s[7][7];for( int i = 1; i <= n; i++){m[i][i] = 0;}for(int l = 2; l<= n; l++){for(int i = 1; i <= n-l+1; i++){int j = i+l-1;m[i][j] = 1e9;for(int k = i; k<=j-1; k++){int q = m[i][k] + m[k+1][j] + p1[i-1]*p1[k]*p1[j];if(q < m[i][j]){m[i][j] = q;s[i][j] = k;}}}}print(s,1,n);cout<<endl;cout<<m[1][n]<<endl;}int main(){matrix_multiply(p1, 7);return 0;}2.java实现(自底向上):
public class 矩阵链乘法 {private static int p[] = {30,35,15,5,10,20,25};private static int p1[] = { 2,10,3,12,5,50,6};public static void main(String[] args) {// TODO Auto-generated method stubmatrix_multiply(p);matrix_multiply(p1);}publicstatic void print(int s[][], int i, int j){if(i == j){System.out.print("A"+i);}else{System.out.print("(");print(s, i, s[i][j]);print(s, s[i][j]+1, j);System.out.print(")");}}publicstatic void matrix_multiply(int p[]){int n = p.length - 1;int m[][] = new int[n+1][n+1];int s[][] = new int[n+1][n+1];for( int i = 1; i <= n; i++){m[i][i] = 0;}for(int l = 2; l<= n; l++){for(int i = 1; i <= n-l+1; i++){int j = i+l-1;m[i][j] = (int) 1e9;for(int k = i; k<=j-1; k++){int q = m[i][k] + m[k+1][j] + p[i-1]*p[k]*p[j];if(q < m[i][j]){m[i][j] = q;s[i][j] = k;}}}}print(s,1,n);System.out.println();System.out.println(m[1][n]);}}3.自顶向下的纯递归:public class 矩阵链乘法_纯递归 {private static int p[] = {30,35,15,5,10,20,25};private static int p1[] = { 2,10,3,12,5,50,6};public static void main(String[] args) {// TODO Auto-generated method stubSystem.out.println(recursive_matrix_chain(p, 1, 6)); System.out.println(recursive_matrix_chain(p1, 1, 6)); }public static int recursive_matrix_chain(int []p, int i, int j) {int n = p.length;int m[][] = new int[n][n];if(i == j) {return 0;}m[i][j] = (int) 1e9;for(int k = i; k<= j-1; k++) {int q = recursive_matrix_chain(p, i, k)+recursive_matrix_chain(p, k+1, j)+ p[i-1]*p[k]*p[j];if(q<m[i][j]) {m[i][j] = q;}}return m[i][j];}}
4.备忘的自顶向下方法:public class 备忘的自顶向下递归 {private static int p[] = {30,35,15,5,10,20,25};private static int p1[] = { 2,10,3,12,5,50,6};public static void main(String[] args) {// TODO Auto-generated method stubSystem.out.println(memoized_matrix_chian(p));System.out.println(memoized_matrix_chian(p1));}public static int memoized_matrix_chian(int p[]) {int n = p.length - 1;int m[][] = new int[n+1][n+1];for(int i = 0; i<=n; i++) {for(int j = 0; j<=n; j++) {m[i][j] = (int) 1e9;}}return recursive_matrix_chain(p, m, 1, n);}public static int recursive_matrix_chain(int []p,int m[][], int i, int j) {if( m[i][j] < 1e9) {return m[i][j];}if(i == j) {m[i][j] = 0;}else {for(int k = i; k<= j-1; k++) {int q = recursive_matrix_chain(p, m, i, k)+recursive_matrix_chain(p, m, k+1, j)+ p[i-1]*p[k]*p[j];if(q<m[i][j]) {m[i][j] = q;}}}return m[i][j];}}
阅读全文
0 0
- 矩阵链乘法
- 矩阵链乘法
- 矩阵链乘法
- 矩阵链乘法
- 矩阵链乘法
- 矩阵链乘法
- 15.2 矩阵链乘法
- 矩阵链乘法
- 矩阵链乘法
- 矩阵链乘法
- 矩阵链乘法
- 矩阵链乘法
- 矩阵链乘法
- 矩阵链乘法
- 【DP】矩阵链乘法
- 矩阵链乘法
- 矩阵链乘法
- 链矩阵乘法
- 众里寻它千百度——ButterKnife源码完全解析
- 练习6
- 为什么清除浮动?清除css浮动的三种方法
- Orcale11g安装口令管理scott忘记勾选处理办法
- 华云千万收购 huayun.com/net/org 等域名
- 矩阵链乘法
- centos7下Elasticsearch5.5.2和head 插件环境搭建
- 线程和进程
- Java基础4:类加载过程
- 使用 vue-cli 搭建项目
- Centos 7 Apache配置虚拟主机
- 数字取整或保留小数四舍五入的正确写法
- python文件运行报错:UnboundLocalError: local variable 'status' referenced before assignment
- Jury Meeting Codeforces Round #433 (Div. 2, based on Olympiad of Metropolises)(贪心,预处理?)