Python实现:生成m个无差别物品到n个无差别容器的唯一分配方案
问题:无差别物品分配到无差别容器的唯一实例生成
需求说明
- 开发概率计算器时,需要解决的核心问题:生成m个无差别物品放入n个无差别容器的所有唯一分配实例
- 实例参考:4个物品、3个容器的唯一分配方式为:(4, 0, 0)、(3, 1, 0)、(2, 2, 0)、(2, 1, 1)
- 去重规则:由于物品和容器均无差别,(0, 4, 0)这类排列与(4, 0, 0)属于同一分配情况,需排除重复项
生成结果的用途
生成的分配实例需作为以下概率计算函数的输入参数:
def get_p_win(*args: tuple) -> float: probability_of_loss = 1 for i in args: probability_of_loss *= (1-i[0] / i[1]) return (1 - probability_of_loss) * 100
- 输入示例:
get_p_win((4, 200), (0, 200), (0, 200)) - 示例含义:计算3次抽奖的获胜概率,假设每次抽奖有200个参与名额,仅第一次抽奖分配了4个我方名额
当前实现代码
最初毫无思路,经建议后已完成可用代码(需导入itertools库才能运行):
import itertools as it def test_strategies(entries: int, draws: int): l = it.combinations_with_replacement(range(entries+1), draws) for i in l: total = 0 for index in range(draws): total += i[index] if total == entries: print(i)
内容的提问来源于stack exchange,提问作者Phlyer
相关产品推荐
相关产品推荐

