在N维矩阵中找到大于x的值,其中x是索引的总和

时间:2012-09-24 11:49:25

标签: algorithm matrix permutation combinations

我们得到一个N维矩阵,其顺序为[m] [m] [m] .... n倍,其中值位置包含其索引的值和。 例如,在6x6矩阵A中,位置A[3][4]的值将为7。

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

如果我们知道一个索引说[i][j] {i+j = x},那么我们只需[i++][j--] [i--][j++] i创建一个对角线,约束j0总是范围为m.A[1][6] -> A[2][5] -> A[3][4] -> A[4][3] -> A[5][2] -> A[6][2] 例如,在值A [3] [4](x = 7)的二维矩阵A [6] [6]中,可以通过以下方式创建对角线:

O(m)

在这里,我们将问题转换为另一个问题,即计算对角线以下的元素,包括对角线。 我们可以轻松计算O(m^2)复杂度,而不是花费2,其中x是矩阵的顺序。 但是如果我们考虑N维矩阵,我们将如何做,因为在N维矩阵中如果我们知道该位置的索引, 其中索引之和为A[i1][i2][i3][i4]....[in],表示i1--次。 然后可能有多个对角线满足该条件,比如做{i2, i3, i4....in}我们可以递增任何{{1}}

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

2 个答案:

答案 0 :(得分:1)

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

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

注意,Kth四面体数是前K个三角数的总和。

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

Kth n-simplexial的值是

 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)= A n (s)具有重要特性:s的k次幂系数是从n个次序组成k的方式的数量。因此,第n个到第k个系数的总和给出了低于第k个对角线

的元素的数量

答案 1 :(得分:0)

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

尝试将其显示为3维矩阵。在三维矩阵的情况下,问题将减少到另一个问题,即count the elements below the diagonal plane including the diagonal