• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

在python中模拟binominal coefficent(nCr)

python 来源:landge 7次浏览

出于好奇,我想知道是否有办法通过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 

版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)