算法导论15.2矩阵链乘法 练习总结

本文总结了算法导论中关于矩阵链乘法的练习,包括如何寻找矩阵链的最优括号化方案,设计递归算法实现最优计算过程,并探讨了在MATRIX-CHAIN-ORDER过程中的访问次数和括号数量的数学证明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

15.2-1 对矩阵规模序列<5,10,3,12,5,50,6>,求矩阵链最优括号化方案。

ANSWER:

def MATRIX_CHAIN_ORDER(p):
	n = len(p)
	s = [[0 for j in range(n)] for i in range(n)]
	m = [[0 for j in range(n)] for i in range(n)]
	for l in range(2, n):			#l is the chain length
		for i in range(1, n-l+1):
			j = i + l - 1
			m[i][j] = 1e9
			for k in range(i, j):
				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()
	PRINT_OPTIMAL_PARENS(s, 1, n-1)
	print()
	
def PRINT_OPTIMAL_PARENS(s, i, j):
	if i == j:
		print('A', end = '')
		print(i, end = '')
	else:
		print('(', end = '')
		PRINT_OPTIMAL_PARENS(s, i, s[i][j])
		PRINT_OPTIMAL_PARENS(s, s[i][j]+1, j)
		print(')', end = '')
		
A = [5, 10, 3, 12, 5, 50, 6]
MATRIX_CHAIN_ORDER(A)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值