【问题标题】:Calculate element in matrix incrementally, using neighbors使用邻居增量计算矩阵中的元素
【发布时间】:2012-10-04 20:40:27
【问题描述】:

我有这个 Java 问题,我怀疑它与更高级别的算法有关,但我的搜索未能找到任何实用的东西。

你构造一个数组如下:

1
1   1
1   2   1
1   3   3   1
1   4   6   4   1
1   5   10  10  5  1

基本上,Ai,j = Ai-1,j-1+Ai-1,j。它应该返回索引 (l, c) 处的元素:对于 (4, 1) 它应该返回 4,(5, 2) 返回 10,等等。我的解决方案很简单,但这还不够:

static long get(int l, int c){
    long[][] matrix = new long[l+1][l+1];
    matrix[0][0]=1;
    matrix[1][0]=1; 
    matrix[1][1]=1;
    for(int i=2;i<=l;i++){
        matrix[i][0]=1;
        for(int j=1;j<=i;j++){
            matrix[i][j] = matrix[i-1][j-1]+matrix[i-1][j];
        }   
    }
    return matrix[l][c];
}

它不适用于较大的 l 和 c 值。使用 BigInteger 不起作用。我的搜索导致我进行循环倾斜和标量化,但我不知道从哪里开始。任何朝着正确方向的引导都非常感谢。

PS:对不起新手,这是我的第一个问题!

【问题讨论】:

    标签: java algorithm matrix


    【解决方案1】:

    您正在描述Pascal's triangle,其中存在封闭公式:

    matrix[n][k] = n!/(k! * (n-k)!)
    

    附:如果这些数字看起来很熟悉,那是因为它们也来自binomial theorem,常见的例子有:

    (x+y)^2 = 1* x^2 + 2xy + 1*y^2
    (x+y)^3 = 1*x^3 + 3*xy^2 + 3yx^2 + 1*y^3
    

    【讨论】:

      【解决方案2】:

      试试这个:

      static long get(int l, int c) throws Exception {
          if (l != c)
               throw new Exception("l != c");
          long[][] matrix = new long[l+1][l+1];
          matrix[0][0]=1;
          for (int i = 1; i <= l; ++i) {
               for (int j = 0; j <= i; ++j) {
                    if (j - 1 >= 0) {
                          matrix[i][j] = matrix[i - 1][j] + matrix[i - 1][j - 1];
                    } else {
                          matrix[i][j] = matrix[i - 1][j];
                    }
               }
          }
          return matrix[l][c];
      }
      

      【讨论】:

        【解决方案3】:

        你不需要使用循环,这只是pascal's triangle,公式:

        (n, k) = n! / ( k! * (n-k)!)
        

        将为位置 (n, k) 生成您的答案。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-04-06
          • 2019-04-09
          相关资源
          最近更新 更多