【发布时间】:2019-05-02 20:40:59
【问题描述】:
我正在尝试寻找所有可能的方法来在 k 个孩子中分发 n 个糖果。
例如,根据星条公式,将 96 颗糖果分配给 5 个孩子的方法数是 100! / (96!*4!) = 3 921 225 大小为 5 的所有可能排列的元组。
list2 = [item for item in it.product(range(97), repeat = 5)
if sum(item) == 96]
我的电脑似乎被复杂性压得喘不过气来。
每个元组消耗 24*5 = 120 字节的内存。这导致 921 225 * 120 = 470547000 字节或 450 mb。似乎没有那么多。为什么 PC 生成此列表的速度如此之慢?我错过了什么?
【问题讨论】:
-
数学对我来说不算数。 100 阶乘比 400 万大得多。
-
首先,你打算用这个list2做什么?因为有更好的方法可以在不耗尽内存的情况下运行此操作,例如使用生成器或在循环中生成,您可以在此处阅读更多详细信息:stackoverflow.com/questions/231767/…
-
it.product(range(97), repeat = 5)产生 97^5 = 8 587 340 257 个值。这需要一些时间。 -
@AdamDadvar 他的问题没有任何区别。
-
看看my answer末尾的定宽分区码。
标签: python combinatorics