【问题标题】:find the values greater than x in N dimensional Matrix, where x is sum of index在 N 维矩阵中找到大于 x 的值,其中 x 是索引的总和
【发布时间】:2012-09-24 11:49:25
【问题描述】:

给定一个 N 维矩阵 [m][m][m]..n 次,其中值位置包含其索引的值总和.. 例如在 6x6 矩阵A 中,A[3][4] 位置的值将为 7。

我们必须找出大于 x 的元素的总数。 对于二维矩阵,我们有以下方法:

如果我们知道一个索引说[i][j] {i+j = x},那么我们只需执行[i++][j--][i--][j++] 来创建对角线,并限制ij 始终在0m. 的范围内 例如,在值 A[3][4] (x = 7) 的二维矩阵 A[6][6] 中,可以通过以下方式创建对角线:

A[1][6] -> A[2][5] -> A[3][4] -> A[4][3] -> A[5][2] -> A[6][2]

在这里,我们将问题转化为另一个问题,即计算对角线以下的元素,包括对角线。 我们可以很容易地计算O(m) 复杂度而不是花费O(m^2) 其中2 是矩阵的顺序。 但是如果我们考虑 N 维矩阵,我们将如何做,因为在 N 维矩阵中,如果我们知道那个位置的索引, 其中索引总和为xA[i1][i2][i3][i4]....[in] 次。 那么可能有多个满足该条件的对角线,例如通过i1-- 我们可以增加{i2, i3, i4....in} 中的任何一个

因此,上述用于二维矩阵的方法在这里变得无用......因为只有两个变量 i1 和 i2 存在。 请帮我找到解决办法

【问题讨论】:

  • 我可能没有正确理解,但您似乎在问这个问题:给定 x、n(维数)和 N,您可以通过多少种方式对 0 到 0 之间的 n 个整数求和N 得到大于 x 的值。

标签: algorithm matrix permutation combinations


【解决方案1】:

对于 2D:对角线以下元素的计数为 triangular number

对于 3D:对角线平面下方的元素数为 tetrahedral number

注意第K个四面体数是前K个三角形数的和。

对于 nD:n-simplexial(我不知道确切的英文术语)数字(是第一个 (n-1)-simplexial 数字的总和)。

第K个n-单纯形的值为

 S(k, n) = k * (k+1) * (k+2).. (k + n - 1) / n! = BinomialCoefficient(k+n-1, n)

编辑:此方法“按原样”适用于主对角(超)平面下方的有限 X 值。

生成函数方法: 让我们有多项式

A(s)=1+s+s^2+s^3+..+s^m

那就是n次方
B(s) = An(s) 有一个重要的性质:s 的 k 次方系数是从 n 个和数组成 k 的方法数。所以第 n 个到第 k 个系数的总和给了我们第 k 个对角线以下元素的计数

【讨论】:

    【解决方案2】:

    对于二维矩阵,您将问题转换为另一个问题,即count the elements below the diagonal including the diagonal

    尝试将其可视化为 3-d 矩阵。如果是3维矩阵,问题会归结为另一个问题,就是count the elements below the diagonal plane including the diagonal

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-18
      • 2015-09-08
      • 1970-01-01
      • 1970-01-01
      • 2013-01-31
      • 1970-01-01
      • 2013-09-02
      相关资源
      最近更新 更多