【发布时间】:2020-07-04 02:20:46
【问题描述】:
我正在尝试找出如何将 90 个苹果放入 90 个盒子中的全部可能性。任何数量的苹果都可以放在一个盒子里(0 到 90 个苹果),但所有的苹果都必须放在盒子里。我使用了递归,但完成计算花费了太多时间。我只能用少量的苹果和盒子来测试我的代码。谁能帮我降低代码的时间复杂度?提前致谢。
import math
boxes = 3
apples = 3
def possibilities(apples, boxes):
if apples == 0:
return 1
if boxes == 0:
return 0
start_point = 0 if boxes > 1 else math.floor(apples/boxes)
p = 0
for n in range(start_point, apples+1):
p += possibilities(apples-n, boxes-1)
return p
t = possibilities(apples,boxes)
print(t)
【问题讨论】:
-
更多与数学相关的问题可能会在本网站的数学版本中询问。如果是我,我会做 9 个盒子,然后将结果乘以 10,但我的数学不是那么好。
-
这可以用二项式系数解决,它内置在一些py模块中:stackoverflow.com/questions/26560726/…
-
@Guy_g23 我不认为二项式系数可以解决这个问题,但如果你能证明它可以,我很乐意改变主意。
-
@JacquesGaudin 这是一个组合问题,因为任何正数和离散数量的苹果都可以放在一个盒子里。检查这个答案:math.stackexchange.com/a/58756
-
@Guy_g23 好的,我认为这取决于这些盒子是否可识别。 en.wikipedia.org/wiki/Stars_and_bars_%28combinatorics%29
标签: python performance recursion statistics