简短版本: 标题说的一切。
日志版本:
我计算了前几个元素的多项式系数。看一下wiki,数学很简单。
N! / (k1! * k2! * ....)
对于中等大小的N,如果你只是暴力破解,数字就会变得相当愚蠢。例如,
500!/ (495! * 4! * 1!)
有500个!在其中,math.log(factorial(500), 10) ~= 1134
当表达式也减少时:
500!/ (495! * 4! * 1!) = 500 * 499 * 498 * 497 * 496 / 24
我尝试使用scipy.misc.comb,这非常适合二项式。对于我的用例,k1比ki(i!= 1)大得多,所以我可以计算二项式系数,然后将其转换为相应的多项式系数,但这似乎有点左右。
我认为有更好的方法。
答案 0 :(得分:2)
这在数学堆栈交换中得到了解答,看起来很合理。
我认为原始答案所做的只是枚举所有术语并取消,然后计算最终结果。所以从蛮力中移除了一步,但看起来并没有溢出。
也许这与计算生物系数相同。无论如何,那里还引用了一个对数算法,我乍一看并不理解。
https://math.stackexchange.com/questions/204085/how-do-i-compute-multinomials-efficiently