下面的代码是对《算法导论》(第二版)第十五章第二节内容的实现。这个算法的时间复杂度是O(n3)(n的3次方)。
下面的网址是网上很常见的一个c++的算法实现: http://blog.csdn.net/ujs_abc/archive/2008/02/01/2076876.aspx
public class MatrixOrder2
{
private static String name = "ABCDEF";
private static int[] a = {30, 35, 15, 5, 10, 20, 25};
private static int len = a.length - 1;
private static int[][] m = new int[len][len];
private static int[][] s = new int[len][len];
public static void main(String[] args)
{
System.out.print("最少需要的计算次数:");
Compute(a, m, s);
System.out.println();
System.out.print("矩阵相乘的顺序为: ");
Display(s, name, 0, len-1);
}
public static void Compute(int[] a, int[][] m, int[][] s)
{
int t = 0;
int min = 0;
int temp = 0;
for(int i=2; i<a.length; i++)
{
for(int j=0; j<a.length-i; j++)
{
t = j + i - 1;
m[j][t] = Integer.MAX_VALUE;
for(int k=j; k<t; k++)
{
temp = m[j][k] + m[k+1][t] + a[j]*a[k+1]*a[t+1];
if(temp < m[j][t])
{
min = temp;
m[j][t] = temp;
s[j][t] = k;
}
}
}
}
System.out.print(min);
}
public static void Display(int[][] s, String name, int i, int j)
{
if(i == j)
{
System.out.print(name.charAt(i));
}
else
{
System.out.print("(");
Display(s, name, i, s[i][j]);
Display(s, name, s[i][j]+1, j);
System.out.print(")");
}
}
}
分享到:
相关推荐
用C++实现的矩阵链相乘算法,并包含大量的注释,对理解程序很有帮助
Java矩阵连乘问题(动态规划)算法实例分析 本文主要介绍了Java矩阵连乘问题的动态规划算法实例分析。矩阵连乘问题是指给定n个矩阵,确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少。 ...
链矩阵乘法是一种优化算法,它通过动态规划来减少矩阵乘法的时间复杂度,通常用于处理大型矩阵以提高计算效率。在Java编程语言中,我们可以设计并实现这个算法来高效地执行矩阵乘法。 链矩阵乘法的基本思想是找到...
在这个“算法之动态规划初步(Java版)”的学习资料中,我们将深入探讨动态规划的基本概念、思想以及如何用Java实现。 首先,我们需要理解动态规划的核心思想:记忆化搜索和自底向上的优化。记忆化搜索是通过存储已...
在这个名为“动态规划课程设计(矩阵链乘问题).docx”的文档中,实验目标是掌握并实现动态规划算法,具体是解决矩阵链乘问题。矩阵链乘问题涉及到多个矩阵的乘法操作,寻找最小的乘法次数来完成这些矩阵的乘法。 ...
标题 "动态规划算法学习十例之八" 暗示了我们将探讨动态规划这一重要的算法概念,特别是通过一个具体的例子——Matrix Chain Multiplication(矩阵链乘法)来深入理解。动态规划是一种解决复杂问题的有效方法,它...
3. 矩阵链乘法:寻找最小代价的矩阵乘法顺序。 4. 背诵单词:记忆游戏,如“Frog Jumps”,在有限步内到达目标单词。 5. 编辑距离:衡量两个字符串之间转换成对方所需的最少操作次数,包括插入、删除和替换字符。 ...
总的来说,这个实验报告提供了动态规划在实际编程中的应用实例,展示了如何使用Java实现动态规划算法来解决整数划分和矩阵连乘问题。通过这两个问题,我们可以更好地理解动态规划的原理和方法,进一步提升在算法设计...
由于Ejml是纯Java实现,因此它可以轻松地与其他Java项目集成,无需额外的依赖或编译步骤。 在压缩包中,`ejml.jar`是Ejml库的可执行文件,包含了所有必要的类和方法,可以直接导入到Java项目中使用。`java中的高效...
- **矩阵链乘法**:优化多矩阵相乘的计算复杂度。 学习动态规划时,需要理解以下几个关键概念: - **状态**:描述问题的一个特定阶段,通常是问题的某个子问题的解。 - **决策**:在动态规划过程中做出的选择,...
动态规划的常见应用包括但不限于:最短路径问题(如Dijkstra算法和Floyd-Warshall算法)、背包问题(如0-1背包、完全背包和多重背包)、最长公共子序列、矩阵链乘法、编辑距离、股票交易(如买卖股票的最佳时机)等...
9. **动态规划**:这是一种优化策略,通过构建状态转移方程来求解问题,例如背包问题、最长公共子序列、矩阵链乘法等。 10. **回溯法**:在解决组合优化问题和逻辑推理问题时常用,如八皇后问题、数独求解等。 11....
- 矩阵链乘法。 - 背包DP、状态DP等。 5. 分治算法: - Strassen矩阵乘法:分治策略优化矩阵乘法。 - Karatsuba乘法:高效地计算两个大数的乘积。 - 汉诺塔问题:经典的递归分治示例。 6. 回溯算法: - 八...
5. **动态规划**:动态规划是一种解决问题的有效方法,常用于求解最优化问题,如背包问题、最长公共子序列、矩阵链乘法等。理解和掌握动态规划的思想,能解决很多看似复杂的问题。 6. **字符串处理**:涉及到KMP...
MatrixChainClass.java 文件很可能包含了一个实现矩阵链乘法的Java程序。该程序可能包括以下几个关键部分: 1. **输入解析**:程序首先需要读取矩阵的尺寸,这通常通过一个表示链的数组完成,数组中的每个元素m[i]...
为了优化多矩阵连乘,可以采用动态规划的思想,预先计算部分中间结果并存储,以避免重复计算,这种方法称为矩阵链乘法。 矩阵链乘法通过构造一个最优乘法顺序,使得总的乘法操作次数最少。它通过计算每对矩阵之间的...
3. 矩阵链乘法:通过计算最优括号组合,降低矩阵相乘的运算次数。 4. 状态转移方程:如斐波那契数列,使用动态规划避免重复计算。 五、字符串算法 1. KMP算法:用于字符串匹配,避免了不必要的回溯。 2. Rabin-...
以行逻辑链接的三元组为结构,实现稀疏矩阵的压缩存储,对压缩后的矩阵进行转置,两矩阵相加相乘。判断所给矩阵是否为稀疏矩阵,java实现
在给定的Java代码示例中,`Dongtai`类包含了主要的动态规划算法实现。`dongtai`方法接收一个整数数组`p`作为输入,其中`p[i]`表示第\( i \)个矩阵的列数(同时也是第\( i+1 \)个矩阵的行数)。该方法首先调用`matrix...