`

动态规划之矩阵链乘法的Java实现

阅读更多

      下面的代码是对《算法导论》(第二版)第十五章第二节内容的实现。这个算法的时间复杂度是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(")");
		}
	}
}
0
0
分享到:
评论

相关推荐

    矩阵链相乘算法

    用C++实现的矩阵链相乘算法,并包含大量的注释,对理解程序很有帮助

    Java矩阵连乘问题(动态规划)算法实例分析

    Java矩阵连乘问题(动态规划)算法实例分析 本文主要介绍了Java矩阵连乘问题的动态规划算法实例分析。矩阵连乘问题是指给定n个矩阵,确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少。 ...

    MatrixMultiplication:链矩阵乘法动态规划算法的Java实现

    链矩阵乘法是一种优化算法,它通过动态规划来减少矩阵乘法的时间复杂度,通常用于处理大型矩阵以提高计算效率。在Java编程语言中,我们可以设计并实现这个算法来高效地执行矩阵乘法。 链矩阵乘法的基本思想是找到...

    算法之动态规划初步(Java版)

    在这个“算法之动态规划初步(Java版)”的学习资料中,我们将深入探讨动态规划的基本概念、思想以及如何用Java实现。 首先,我们需要理解动态规划的核心思想:记忆化搜索和自底向上的优化。记忆化搜索是通过存储已...

    动态规划课程设计(矩阵链乘问题).docx

    在这个名为“动态规划课程设计(矩阵链乘问题).docx”的文档中,实验目标是掌握并实现动态规划算法,具体是解决矩阵链乘问题。矩阵链乘问题涉及到多个矩阵的乘法操作,寻找最小的乘法次数来完成这些矩阵的乘法。 ...

    动态规划算法学习十例之八

    标题 "动态规划算法学习十例之八" 暗示了我们将探讨动态规划这一重要的算法概念,特别是通过一个具体的例子——Matrix Chain Multiplication(矩阵链乘法)来深入理解。动态规划是一种解决复杂问题的有效方法,它...

    动态规划java版本

    3. 矩阵链乘法:寻找最小代价的矩阵乘法顺序。 4. 背诵单词:记忆游戏,如“Frog Jumps”,在有限步内到达目标单词。 5. 编辑距离:衡量两个字符串之间转换成对方所需的最少操作次数,包括插入、删除和替换字符。 ...

    动态规划—整数划分和矩阵连乘的java程序借鉴.pdf

    总的来说,这个实验报告提供了动态规划在实际编程中的应用实例,展示了如何使用Java实现动态规划算法来解决整数划分和矩阵连乘问题。通过这两个问题,我们可以更好地理解动态规划的原理和方法,进一步提升在算法设计...

    Java ejml矩阵包

    由于Ejml是纯Java实现,因此它可以轻松地与其他Java项目集成,无需额外的依赖或编译步骤。 在压缩包中,`ejml.jar`是Ejml库的可执行文件,包含了所有必要的类和方法,可以直接导入到Java项目中使用。`java中的高效...

    程序设计大赛-动态规划参考资料

    - **矩阵链乘法**:优化多矩阵相乘的计算复杂度。 学习动态规划时,需要理解以下几个关键概念: - **状态**:描述问题的一个特定阶段,通常是问题的某个子问题的解。 - **决策**:在动态规划过程中做出的选择,...

    动态规划经典题集(一流大学的课件)

    动态规划的常见应用包括但不限于:最短路径问题(如Dijkstra算法和Floyd-Warshall算法)、背包问题(如0-1背包、完全背包和多重背包)、最长公共子序列、矩阵链乘法、编辑距离、股票交易(如买卖股票的最佳时机)等...

    HDU题目java实现

    9. **动态规划**:这是一种优化策略,通过构建状态转移方程来求解问题,例如背包问题、最长公共子序列、矩阵链乘法等。 10. **回溯法**:在解决组合优化问题和逻辑推理问题时常用,如八皇后问题、数独求解等。 11....

    java数百种算法实现

    - 矩阵链乘法。 - 背包DP、状态DP等。 5. 分治算法: - Strassen矩阵乘法:分治策略优化矩阵乘法。 - Karatsuba乘法:高效地计算两个大数的乘积。 - 汉诺塔问题:经典的递归分治示例。 6. 回溯算法: - 八...

    一线互联网大厂算法面试问题Java实现

    5. **动态规划**:动态规划是一种解决问题的有效方法,常用于求解最优化问题,如背包问题、最长公共子序列、矩阵链乘法等。理解和掌握动态规划的思想,能解决很多看似复杂的问题。 6. **字符串处理**:涉及到KMP...

    矩阵连乘算法

    MatrixChainClass.java 文件很可能包含了一个实现矩阵链乘法的Java程序。该程序可能包括以下几个关键部分: 1. **输入解析**:程序首先需要读取矩阵的尺寸,这通常通过一个表示链的数组完成,数组中的每个元素m[i]...

    矩阵连乘_矩阵连乘问题_

    为了优化多矩阵连乘,可以采用动态规划的思想,预先计算部分中间结果并存储,以避免重复计算,这种方法称为矩阵链乘法。 矩阵链乘法通过构造一个最优乘法顺序,使得总的乘法操作次数最少。它通过计算每对矩阵之间的...

    经典算法Java实现

    3. 矩阵链乘法:通过计算最优括号组合,降低矩阵相乘的运算次数。 4. 状态转移方程:如斐波那契数列,使用动态规划避免重复计算。 五、字符串算法 1. KMP算法:用于字符串匹配,避免了不必要的回溯。 2. Rabin-...

    以行逻辑链接的三元组为结构,实现稀疏矩阵的压缩存储,对压缩后的矩阵进行转置,两矩阵相加相乘 java

    以行逻辑链接的三元组为结构,实现稀疏矩阵的压缩存储,对压缩后的矩阵进行转置,两矩阵相加相乘。判断所给矩阵是否为稀疏矩阵,java实现

    动态规划求连乘问题报告

    在给定的Java代码示例中,`Dongtai`类包含了主要的动态规划算法实现。`dongtai`方法接收一个整数数组`p`作为输入,其中`p[i]`表示第\( i \)个矩阵的列数(同时也是第\( i+1 \)个矩阵的行数)。该方法首先调用`matrix...

Global site tag (gtag.js) - Google Analytics