以下ncr系列的O(1)时间复杂度之和

时间:2018-11-08 01:53:13

标签: algorithm math time-complexity combinatorics

有多种形式的查询

  Q(n,m)=(nC1 * mC1)+(nC2 * mC2)+(nC3 * mC3)...(nCk * mCk)其中   k = min(n,m)

如何在O(1)时间复杂度中找到 Q(n,m)的值。

我尝试预先计算ncr [N] [N]矩阵和dp [N] [N] [N],其中dp[n][m][min(n,m)] = Q(n,m).

此预计算需要O(N ^ 3)时间,现在可以O(1)时间回答查询。但是我正在寻找一种方法,其中预计算不应花费更多的O(N ^ 2)时间。

1 个答案:

答案 0 :(得分:2)

从C(n,0)* C(m,0)开始的解决方案似乎很简单

Q0(n,m) = C(n+m, m)

所以您的配方只需减去1

Q(n,m) = C(n+m, m) - 1

示例:n = 9,m = 5

帕斯卡三角形第9和第5行的点积为

1   9     36    84    126   126  84  36  9  1
1   5     10    10    5     1
1 + 45 +  360 + 840 + 630 + 126                = 2002    = C(14,5)

也许可以用从Q(n,1)开始的数学归纳法来证明,但是表达式相当长。

我发现了这个命题的真正奇妙的证明,即这个界限太窄而无法包含©Fermat;)