最有效的计算排列P(n,r)的方法,其中n可以是一个大整数

时间:2016-04-21 14:08:03

标签: algorithm permutation

如果n可以大到1M并且r大约为100,那么计算nPr的最有效方法是什么。

1 个答案:

答案 0 :(得分:1)

P(n,r) = n! / (n-r)!

我们很容易删除(n-r)!从提名者和分母。现在公式是

P(n,r) = n*(n-1)*..(n-r+1)

旧答案,不是关于这个问题,关于组合:

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

我们很容易删除(n-k)!从提名者和分母。现在公式是

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

如果我们先计算完整的提名者,那就非常大了。

但是我们可以交替步骤 - 取n,然后除以第一项分母(1),乘以(n-1) - 除以第二分母项(2),依此类推。

 C(n,k) = n / 1 * (n-1) / 2 * (n-2) / 3 .. * (n-k+1) / k

请注意,部分提名产品总是可以被相同长度的部分分母产品整除。

使用这种方法,中间结果不是很大,大数(长算术)的计算会更快。