如何根æ®æ•°å­¦æœŸæœ›åˆ†é…概率

时间:2019-04-29 01:56:51

标签: python algorithm

摘è¦

p1 * cost1 + p2 * cost2 + p3 * cost3 + ... = n
p1 + p2 + p3 + ... = 1

已知

cost1,cost2,cost3,...

n

解决

p1,p2,p3,...

说明

我è¦åŽ»åšä¸€ä¸ªçº¸ç‰Œæ¸¸æˆï¼ˆé€—我玩)。现在我有很多ä¸åŒä»·æ ¼çš„å¡ï¼Œä¾‹å¦‚:

[
    {
        'name': 'card1',
        'cost': 10
    },
    {
        'name': 'card2',
        'cost': 100
    },
    {
        'name': 'card3',
        'cost': 1000
    },
    {
        'name': 'card4',
        'cost': 10000
    },
]

然åŽï¼Œæˆ‘希望这个游æˆçš„数学期望等于500。所以我有一个想法,将数学期望分为ä¸åŒçš„部分,然åŽåˆ†åˆ«è®¡ç®—它们的概率。

[
    {
        'name': 'card1',
        'cost': 10,
        'math_expect': 3,
    },
    {
        'name': 'card2',
        'cost': 100,
        'math_expect': 30,
    },
    {
        'name': 'card3',
        'cost': 1000,
        'math_expect': 300,
    },
    {
        'name': 'card4',
        'cost': 10000,
        'math_expect': 167,
    },
]

现在我å¯ä»¥èŽ·å¾—æ¯å¼ å¡çš„概率。

p_card1 = 3 / 10  # 0.3
p_card2 = 30 / 100  # 0.3
p_card3 = 300 / 1000  # 0.3
p_card4 = 167 / 10000  # 0.0167
p_sum = p_card1 + p_card2 + p_card3 + p_card4  # 0.9167

如您所è§ï¼Œæ¦‚率总和ä¸ç­‰äºŽ1,因此我必须指定一个新的概率p_no_card = 1 - p_sum = 0.0833。实际上,如果我更改期望分布,则概率总和甚至大于1。

所以我写了一个愚蠢的嵌套循环æ¥åšåˆ°è¿™ä¸€ç‚¹ï¼š

cost1 = 10
cost2 = 100
cost3 = 1000
cost4 = 10000

for i in range(cost1):
    for j in range(min(cost2, 500 - i)):
        for k in range(min(cost3, 500 - i - j)):
            l = 500 - i - j - k
            p_sum = 1.0 * i / cost1 + 1.0 * j / cost2 + 1.0 * k / cost3 + 1.0 * l / cost4
            if abs(p_sum - 1) < 0.0005:
                print p_sum, i, j, k, l

通过这个嵌套循环,我å¯ä»¥èŽ·å¾—很多结果,并为我的游æˆé€‰æ‹©äº†æœ€ä½³é€‰æ‹©ã€‚但是,如果我è¦æ·»åŠ æ›´å¤šçš„å¡ï¼Œä¾‹å¦‚100å¼ å¡ï¼Œæ­¤å¾ªçŽ¯å°†å˜å¾—缓慢且ä¸ç²¾ç¡®ï¼ˆæ˜“于ç†è§£ï¼Œå¦‚果期望的æ¯ä¸ªéƒ¨åˆ†éƒ½å¤ªå°ï¼Œåˆ™èŒƒå›´æ­¥é•¿1会太大)。

那么我该如何快速而准确地分é…数学期望呢?一个主æ„就足够了。我å¯ä»¥è‡ªå·±å®žçŽ°ç›¸åº”的代ç ã€‚

0 个答案:

没有答案