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

23-算法设计

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

4.5.2 算法设计

采用自底向上的方法求最优值,分为不同规模的子问题,对于每一个小的子问题都求最优值,记录最优策略,具体策略如下。

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

采用二维数组r[][]输入数据,二维数组m[][]存放各个子问题的最优值,二维数组s[][]存放各个子问题的最优决策(停靠站点)。

(2)初始化

根据递推公式,可以把m[i][j]初始化为r[i][j],然后再找有没有比m[i][j]小的值,如果有,则记录该最优值和最优解即可。初始化为:m[i][j]=r[i][j],s[i][j]=0,其中,i=1,2,…,n,j=i+1,i+2,…,n。

(3)循环阶段

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

(4)构造最优解

根据最优决策信息数组s[][]递归构造最优解。s[1][n]是第1个站点到第n个站点(1,2,…,n)的最优解的停靠站点,即停靠了第s[1][n]个站点,我们在递归构造两个子问题(1,2,…,k)和(k,k +1,…,n)的最优解停靠站点,一直递归到子问题只包含一个站点为止。