在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

回到顶部