一个感兴趣的算法
在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