计算$ 2n $元素配对的方式的更快方法是什么?

时间:2016-06-30 14:23:17

标签: algorithm combinatorics discrete-mathematics

问题在于2n个元素可以配对的方式有多少,我的方法是将所有奇数乘以2n

(2n-1)*(2n-3)*...*1

但是我的教授声称它在算法意义上可以做得更快,但我真的没有看到这样做的方法。任何提示?谢谢!

2 个答案:

答案 0 :(得分:1)

更新:这可能不是你要问的:

你的问题改写:从一组2n元素中选择两个元素的方法有多少?也称为组合,二项式系数或选择数,并读取"n choose k"

您可以采用公式n! / (k! * (n - k)!),将n替换为2n,然后将其代数简化为(2n - 1) * n

#!/usr/bin/env python
# coding: utf-8

def pairs(n):
    return (2 * n - 1) * n

# there is only one pair for an 2n element set {0, 1}
print(pairs(1)) # prints 1

# pairs of {0, 1, 2, 3} = {0, 1}, {0, 2}, {0, 3}, {1, 2}, {1, 3}, {2, 3}
print(pairs(2)) # prints 6

答案 1 :(得分:0)

基本上你在计算(2n)!/(n!2 ^ n),因为乘以小于或等于2n的所有偶数给出:

2n * (2(n-1)) * (2(n-2)) * ... * 2 = n!2^n

Alrtortithmically factorials可以在几乎恒定的时间内在特定的例程中计算。一种方法是使用斯特林近似公式(足够大的数字)

n! ~ sqrt(2 pi n)(n/e)^n