在python中模拟binominal coefficent(nCr)
出于好奇,我想知道是否有办法通过python中的模拟解决二项系数。我尝试了一下,但这些数字变得如此之快,以至于我无法解决这个问题,只能得到很少的数字。在python中模拟binominal coefficent(nCr)
我知道这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))
有没有可能为大数字高效,快速做到这一点?
回答:
我用这个,它非常高效地为大量:
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
以上是 在python中模拟binominal coefficent(nCr) 的全部内容, 来源链接: utcz.com/qa/262503.html