出于好奇,我想知道是否有办法通过python中的模拟来解决二项式系数。我尝试了一下,但数字变得如此之快以至于我无法解决任何问题,只有非常小的数字。
我已经意识到这个question但是无法确定一种只使用蛮力来解决系数的解决方案。但我必须承认,我并不了解那里列出的所有实现。
这是我天真的做法:
import random
import numpy as np
from math import factorial as fac
# Calculating the reference with help of factorials
def comb(n,k):
return fac(n) // fac(k) // fac(n-k)
# trying a simple simulation with help of random.sample
random.seed(42)
n,k = 30,3
n_sim = 100000
samples = np.empty([n_sim,k], dtype=int)
for i in range(n_sim):
x = random.sample(range(n),k)
samples[i] = sorted(x)
u = np.unique(samples, axis=0)
print(len(u))
print(comb(n,k))
对于大数字,是否可以有效和快速地做到这一点?
答案 0 :(得分:0)
我使用它,对于大数字来说非常有效:
def nck(n, k):
if k < 0 or k > n:
return 0
if k == 0 or k == n:
return 1
k = min(k, n - k) # take advantage of symmetry
c = 1
for i in range(k):
c = c * (n - i) // (i + 1)
return c