?? 程序.txt
字號:
1. 遞歸方法
int C(int i, int j)
{ //返回c(i,j) 且計算k(i,j) = kay[i][j]
if (i==j) return 0; //一個矩陣的情形
if (i == j-1)
{ //兩個矩陣的情形
kay[i][i+1]=i;
return r[i]*r[i+1]*r[i+2];
}
//多于兩個矩陣的情形
//設u為k = i 時的最小值
int u=C(i,i)+C(i+1,j)+r[i]*r[i+1]*r[j+1];
kay[i][j]=i;
//計算其余的最小值并更新u
for (int k=i+1;k<j;k++)
{
int t=C(i,k)+C(k+1,j)+r[i]*r[k+1]*r[j+1];
if(t<u)
{ //小于最小值的情形
u=t;
kay[i][j]=k;
}
return u;
}
}
3. 迭代方法
void MatrixChain(int r[],int q,int **c,int **kay)
{ // 為所有的Mij 計算耗費和k a y
// 初始化c[i][i], c[i][i+1]和kay[i][i+1]
for(int i=1;i<q;i++)
{
c[i][i]=0;
c[i][i+1]=r[i]*r[i+1]*r[i+2];
kay[i][i+1]=i;
}
c[q][q]=0;
//計算余下的c和kay
for(int s=2;s<q;s++)
for(int i=1;i<=q-s;i++)
{
// k=i時的最小項
c[i][i+s]=c[i][i]+c[i+1][i+s]+r[i]*r[i+1]*r[i+s+1];
kay[i][i+s]=i;
// 余下的最小項
for(int k=i+1;k<i+s;k++)
{
int t=c[i][k]+c[k+1][i+s]+r[i]*r[k+1]*r[i+s+1];
if(t<c[i][i+s])
{ // 更小的最小項
c[i][i+s]=t;
kay[i][i+s]=k;
}
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -