【发布时间】:2017-04-21 01:34:55
【问题描述】:
有 k 个治疗和 N 个总测试分布在治疗之间,这称为计划。对于一个固定的计划,我想在 Python 中输出所有可能的成功集。
问题:
例如,如果医生正在测试头痛药,如果 k=2 种治疗方法(即阿司匹林和布洛芬)并且总共测试 N=3,则一个计划可能是(1 次阿司匹林测试,2 次布洛芬测试)。对于该计划,我如何输出阿司匹林 0-1 次成功测试和布洛芬 0-2 次成功测试的所有可能组合?一项成功的测试意味着当头痛的患者服用阿司匹林时,阿司匹林可以治愈他们的头痛。
请使用 python 代码发布答案,而不是数学答案。
所需的输出是一个列表,其中包含 [# 治疗 1 成功,# 治疗 2 成功]:
[ [0,0], [0,1], [0,2], [1,0], [1,1], [1,2] ]
如果可以使用yield,那就太好了,因为上面的列表可能很长,我不想将整个列表存储在内存中,这会增加计算时间。
下面我有代码用于枚举 A 框中 N 个球的所有可能组合,这应该类似于创建我认为的所有可能的成功集,但我不确定如何。
代码
#Return list of tuples of all possible plans (n1,..,nk), where N = total # of tests = balls, K = # of treatments = boxes
#Code: Glyph, http://stackoverflow.com/questions/996004/enumeration-of-combinations-of-n-balls-in-a-boxes
def ballsAndBoxes(balls, boxes, boxIndex=0, sumThusFar=0):
if boxIndex < (boxes - 1):
for counter in range(balls + 1 - sumThusFar):
for rest in ballsAndBoxes(balls, boxes,
boxIndex + 1,
sumThusFar + counter):
yield (counter,) + rest
else:
yield (balls - sumThusFar,)
【问题讨论】:
-
你能在你的例子中包含你想要的输出吗?
-
将所需的输出添加到我的代码@Allen!
标签: python combinations enumeration combinatorics