【问题标题】:All minimum values in matrix optimization矩阵优化中的所有最小值
【发布时间】:2012-10-22 07:27:59
【问题描述】:

我有一个矩阵nxn,带有正整数。我必须计算每个元素的成本。

Cost(i, j) = min( val(p, r) + dist(pos(i, j) ,pos(p, r)) ), p, r = 0:n-1.

dist(pos(i, j) ,pos(p, r)) = |i - p| + |j – r|(距离曼哈顿)

我用这样的方法在 O(n^4) 中解决了这个问题:

for(int i = 0 ; i < n ; i ++)

  for(int j = 0 ; j < n ; j ++) {
    int cost = 9999999;

    for(p = 0 ; p < n ; p ++) {

      for(r = 0 ; r < n ; r ++) {

        if( val[p][r] + abs(i-p) + abs(j-r)) < cost {

           cost = val[p][r] + abs(i-p) + abs(j-r);

        }

       }

     }

}

现在,我需要 O(n^2) 的最优解。我知道这是可能的,而且我听说解决方案是动态编程,但我看不出这怎么可能。

【问题讨论】:

    标签: dynamic matrix minimum


    【解决方案1】:

    我在 n^2 中解决了。这个想法是在行(左右和左右)和列(上下和上下)上进行迭代。

    无效排序(int **v){

    //上线

    for(int i = 0 ; i

    //left to right
    for(int j = 1 ; j < n ; j ++) {
      if(v[i][j-1] + 1 < v[i][j])
        v[i][j] = 1 + v[i][j-1];
    }
    //right to left
    for(int j = n-2 ; j >= 0 ; j --) {
      if(v[i][j+1] + 1 < v[i][j])
        v[i][j] = 1 + v[i][j+1];
    }
    

    }

    //在列上

    for(int j = 0 ; j

    //up to down
    for(int i = 1 ; i < n ; i ++) {
      if(v[i-1][j] + 1 < v[i][j])
        v[i][j] = 1 + v[i-1][j];
    }
    //down to up
    for(int i = n-2 ; i >= 0 ; i --) {
      if(v[i+1][j] +1 <v[i][j])
        v[i][j] = 1 + v[i+1][j];
    }
    

    } }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-01
      • 2015-09-26
      • 1970-01-01
      • 1970-01-01
      • 2021-08-25
      • 2017-04-02
      • 2020-12-05
      • 1970-01-01
      相关资源
      最近更新 更多