当前位置:嗨网首页>书籍在线阅读

30-算法设计

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

4.6.2 算法设计

采用自底向上的方法求最优值,对于每一个小规模的子问题都求最优值,并记录最优策略(加括号位置),具体算法设计如下。

(1)确定合适的数据结构

采用一维数组p[]来记录矩阵的行和列,第i个矩阵的行数存储在数组的第i−1位置,列数存储在数组的第i位置。二维数组m[][]来存放各个子问题的最优值,二维数组s[][]来存放各个子问题的最优决策(加括号的位置)。

(2)初始化

采用一维数组p[]来记录矩阵的行和列,m[i][i]=0,s[i][i]=0,其中i= 1,2,3,…,n。

(3)循环阶段

  • 按照递归关系式计算2个矩阵A iA i+1相乘时的最优值,j=i+1,并将其存入m[i][j],同时将最优策略记入s[i][j],i=1,2,3,…,n−1。
  • 按照递归关系式计算3个矩阵相乘A iA i+1A i+2相乘时的最优值,j=i+2,并将其存入m[i][j],同时将最优策略记入s[i][j],i=1,2,3,…,n−2。
  • 以此类推,直到求出n个矩阵相乘的最优值m[1][n]。

(4)构造最优解

根据最优决策信息数组s[][]递归构造最优解。s[1][n] 表示A1A2A n最优解的加括号位置,即(A1A2As[1][n])(As[1][n]+1A n),我们在递归构造两个子问题(A1A2As[1][n])、(As[1][n]+1A n)的最优解加括号位置,一直递归到子问题只包含一个矩阵为止。