在python中模拟二项系数(nCr)

2024-05-12 20:14:28 发布

您现在位置:Python中文网/ 问答频道 /正文

出于好奇,我想知道是否有一种方法可以通过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))

有没有可能高效、快速地处理大量数据?在


Tags: ofsampleimportaswithnphelprange
1条回答
网友
1楼 · 发布于 2024-05-12 20:14:28

我用这个,它对大量数据非常有效:

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

相关问题 更多 >