动态规划之矩阵链乘法的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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值