问题在于2n
个元素可以配对的方式有多少,我的方法是将所有奇数乘以2n
。
(2n-1)*(2n-3)*...*1
但是我的教授声称它在算法意义上可以做得更快,但我真的没有看到这样做的方法。任何提示?谢谢!
答案 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