我試圖找到所有可能的方法在 k 個孩子之間分發 n 個糖果。例如,根據星條形公式,在 5 個孩子之間分配 96 顆糖果的方法數是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 生成此列表的速度如此之慢?我錯過了什么?
2 回答

Smart貓小萌
TA貢獻1911條經驗 獲得超7個贊
我看到你的數學有兩個問題。
首先,你在那里描述一個組合。實際上,您正在考慮(96 選擇 5),這并未涵蓋所有排列。
其次,排列實際上是 96!/91!,比約 400 萬高幾個數量級。
只需添加字節數,您現在就處于高 GB的內存使用范圍內,這可以解釋為什么您的機器變慢了;僅由此產生的內存使用量就可以粉碎大多數現代消費機器。
添加回答
舉報
0/150
提交
取消