ВОПРОС: Предположим, что мы случайным образом рисуем из коробки 50 цветных шаров (например, 10 красных, 40 синих). Если выбранный шар красного цвета, он не заменяется на коробку. В противном случае синий шар заменяется обратно в коробку, поэтому 40 синих является постоянным в ячейке, а красный уменьшается со временем, что влияет на вероятность. Какова вероятность получения более 9 красных шаров за 50 розыгрышей?
ЧТО Я ПРОБОВАЛ: Прошу прощения за свои навыки в гетто-питоне, я написал код, в котором каждый розыгрыш дает 2 результата, красный или синий. ,Поэтому после 50 розыгрышей я вычисляю все комбинации и соответствующие вероятности и добавляю все вероятности комбинаций с более чем 9 красными шарами.
ПРОБЛЕМА: Код работает, если я ставлю, скажем, 10 ничьих. Но если я поставлю 50 дро, то нужно будет вычислить 2 ^ 50 комбинаций, и это займет слишком много времени. Есть ли способ кодировать это более эффективно?
def drawred(redlist,bluelist):
if len(redlist) == 0:
newredlist = []
redprob = red/float(red+blue)
newred = red - 1
newredlist.append(['R', redprob, newred])
else:
newredlist = []
for i in redlist:
redprob = i[1]*i[2]/float(i[2]+blue)
newred = i[2] - 1
newredlist.append([i[0] + 'R', redprob, newred])
for i in bluelist:
redprob = i[1]*i[2]/float(i[2]+blue)
newred = i[2] - 1
newredlist.append([i[0] + 'R', redprob, newred])
return newredlist
def drawblue(redlist,bluelist):
if len(bluelist) == 0:
newbluelist = []
blueprob = blue/float(red+blue)
newred = red
newbluelist.append(['B', blueprob, newred])
else:
newbluelist = []
for i in redlist:
blueprob = i[1]*blue/float(i[2]+blue)
newred = i[2]
newbluelist.append([i[0] + 'B', blueprob, newred])
for i in bluelist:
blueprob = i[1]*blue/float(i[2]+blue)
newred = i[2]
newbluelist.append([i[0] + 'B', blueprob, newred])
return newbluelist
draws = 50
draw_current = 1
red = 10
blue = 40
redlist = []
bluelist = []
while draw_current <= draws:
redlist = drawred(redlist,bluelist)
bluelist = drawblue(redlist,bluelist)
draw_current += 1
finallist = redlist + bluelist
probability = 0
for i in finallist:
if i[0].count('R') >= 9:
probability += i[1]
print probability*100