一个感兴趣的算法

在csdn中看到一个题目

http://topic.csdn.net/u/20080626/13/4efca1a4-8534-44fd-ae87-f65463e7cb93.html

题目内容是:
三个数的乘法:a*b*c,共有两种结合方式:(a*b)*c,a*(b*c)
四个数的乘法:a*b*c*d,共有五种结合方式:((a*b)*c)*c, (a*(b*c))*d, a*((b*c)*d), a*(b*(c*d)), (a*b)*(c*d)
让你写一个函数,参数是乘数的个数,返回值是用乘法结合律后可能的结合方式总数。

 

记录一个解决方法

 

Matrix-Chain-Order(int p[])
{
n = p.length - 1;
for (i = 1; i <= n; i++)
m[i,i] = 0;
for (l=2; l<=n; l++) { // l is chain length
for (i=1; i<=n-l+1; i++) {
j = i+l-1;
m[i,j] = MAXINT;
for (k=i; k<=j-1; k++) {
q = m[i,k] + m[k+1,j] + p[i-1]*p[k]*p[j];//Matrix Ai has the dimension  p[i-1] x p[i].
if (q < m[i,j]) {
m[i,j] = q;
s[i,j] = k;
}
}
}
}
}

这个方法的链接地址是

http://en.wikipedia.org/wiki/Chain_matrix_multiplication

posted on 2008-07-23 19:31  星星博客园  阅读(238)  评论(0编辑  收藏  举报

导航

立即注册PayPal并开始接受信用卡付款。