Re: Еще шары в урнах
От: Кодт Россия  
Дата: 30.03.09 13:46
Оценка:
Здравствуйте, nikov, Вы писали:

N>Имеется 5 урн, в каждой из них по 3 шара (в 4 урнах по 2 белых и 1 черному шару, а в 1 урне — 1 белый и 2 черных).

N>Урны в случайном порядке выставляются в ряд (все перестановки равновероятны). Из 1-й урны вынимают наугад шар и перекладывают во 2-ю, затем из 2-й вынимают наугад шар и перекладывают в 3-ю, и т.д. Наконец, наугад вынимают шар из 5-й урны.

N>1) Какова вероятность, что он окажется белым?


Это ведь этюд для программистов?
# -*- coding: cp866 -*-
# (виндоуз, консоль, русские буквы в программе)

# НОД
def gcd(a,b) :
    if a<0 :
        a = -a
    if b<0 :
        b = -b
    if a<b :
        (a,b) = (b,a)
    while b :
        (a,b) = (b,a%b)
    return a

# по-быстрому класс рациональной арифметики
class Ratio :
    n = 0
    d = 1
    def __init__(self,n,d) :
        g = gcd(n,d)
        self.n=n/g
        self.d=d/g
    def show(self) :
        return "(%d/%d)" % (self.n,self.d)
    def __repr__(self) :
        return self.show()
    def __str__(self) :
        return self.show()
    def __add__(self,other) :
        return Ratio( self.n*other.d + other.n*self.d, self.d*other.d )
    def __sub__(self,other) :
        return Ratio( self.n*other.d - other.n*self.d, self.d*other.d )
    def __mul__(self,other) :
        return Ratio( self.n*other.n, self.d*other.d )
    def __radd__(self,other) :
        return self + Ratio(other,1)

# константы
pzero = Ratio(0,1)
pone = Ratio(1,1)
p14,p24,p34 = Ratio(1,4),Ratio(2,4),Ratio(3,4)

# количество корзин
buckets = 5

# вероятности для каждой перестановки
probs = {}

# всего у нас 5 перестановок - когда корзина с 1 белым и 2 чёрными шарами оказывается на заданной позиции
for specbucket in xrange(1,buckets+1) :
    print "корзина %d особенная" % specbucket
    if specbucket==1 :
        p = Ratio(1,3)
    else :
        p = Ratio(2,3)
    print "  вытаскиваем %d-й шар, он белый с вероятностью %s" % (1,p)
    for bucket in xrange(2,buckets+2) :
        if bucket==specbucket :
            # 1 of 4 <- if ball is black
            # 2 of 4 <- if ball is white
            # 3 of 4 <- never
            (p1,p2,p3) = (pone-p,p,pzero)
        else :
            (p1,p2,p3) = (pzero,pone-p,p)
        print "  в корзине %d лежат 1..3 белых шара из 4 с вероятностями %s" % (bucket,(p1,p2,p3))
        p = p1*p14 + p2*p24 + p3*p34
        print "  вытаскиваем %d-й шар, он белый с вероятностью %s" % (1,p)
    probs[specbucket] = p

print "итого, вероятности"
for i in probs :
    print "  %d -> %s" % (i, probs[i])
print "суммарная вероятность %s" % (sum(probs[i] for i in probs)*Ratio(1,5))



корзина 1 особенная
  вытаскиваем 1-й шар, он белый с вероятностью (1/3)
  в корзине 2 лежат 1..3 белых шара из 4 с вероятностями ((0/1), (2/3), (1/3))
  вытаскиваем 1-й шар, он белый с вероятностью (7/12)
  в корзине 3 лежат 1..3 белых шара из 4 с вероятностями ((0/1), (5/12), (7/12))
  вытаскиваем 1-й шар, он белый с вероятностью (31/48)
  в корзине 4 лежат 1..3 белых шара из 4 с вероятностями ((0/1), (17/48), (31/48))
  вытаскиваем 1-й шар, он белый с вероятностью (127/192)
  в корзине 5 лежат 1..3 белых шара из 4 с вероятностями ((0/1), (65/192), (127/192))
  вытаскиваем 1-й шар, он белый с вероятностью (511/768)
  в корзине 6 лежат 1..3 белых шара из 4 с вероятностями ((0/1), (257/768), (511/768))
  вытаскиваем 1-й шар, он белый с вероятностью (2047/3072)
корзина 2 особенная
  вытаскиваем 1-й шар, он белый с вероятностью (2/3)
  в корзине 2 лежат 1..3 белых шара из 4 с вероятностями ((1/3), (2/3), (0/1))
  вытаскиваем 1-й шар, он белый с вероятностью (5/12)
  в корзине 3 лежат 1..3 белых шара из 4 с вероятностями ((0/1), (7/12), (5/12))
  вытаскиваем 1-й шар, он белый с вероятностью (29/48)
  в корзине 4 лежат 1..3 белых шара из 4 с вероятностями ((0/1), (19/48), (29/48))
  вытаскиваем 1-й шар, он белый с вероятностью (125/192)
  в корзине 5 лежат 1..3 белых шара из 4 с вероятностями ((0/1), (67/192), (125/192))
  вытаскиваем 1-й шар, он белый с вероятностью (509/768)
  в корзине 6 лежат 1..3 белых шара из 4 с вероятностями ((0/1), (259/768), (509/768))
  вытаскиваем 1-й шар, он белый с вероятностью (2045/3072)
корзина 3 особенная
  вытаскиваем 1-й шар, он белый с вероятностью (2/3)
  в корзине 2 лежат 1..3 белых шара из 4 с вероятностями ((0/1), (1/3), (2/3))
  вытаскиваем 1-й шар, он белый с вероятностью (2/3)
  в корзине 3 лежат 1..3 белых шара из 4 с вероятностями ((1/3), (2/3), (0/1))
  вытаскиваем 1-й шар, он белый с вероятностью (5/12)
  в корзине 4 лежат 1..3 белых шара из 4 с вероятностями ((0/1), (7/12), (5/12))
  вытаскиваем 1-й шар, он белый с вероятностью (29/48)
  в корзине 5 лежат 1..3 белых шара из 4 с вероятностями ((0/1), (19/48), (29/48))
  вытаскиваем 1-й шар, он белый с вероятностью (125/192)
  в корзине 6 лежат 1..3 белых шара из 4 с вероятностями ((0/1), (67/192), (125/192))
  вытаскиваем 1-й шар, он белый с вероятностью (509/768)
корзина 4 особенная
  вытаскиваем 1-й шар, он белый с вероятностью (2/3)
  в корзине 2 лежат 1..3 белых шара из 4 с вероятностями ((0/1), (1/3), (2/3))
  вытаскиваем 1-й шар, он белый с вероятностью (2/3)
  в корзине 3 лежат 1..3 белых шара из 4 с вероятностями ((0/1), (1/3), (2/3))
  вытаскиваем 1-й шар, он белый с вероятностью (2/3)
  в корзине 4 лежат 1..3 белых шара из 4 с вероятностями ((1/3), (2/3), (0/1))
  вытаскиваем 1-й шар, он белый с вероятностью (5/12)
  в корзине 5 лежат 1..3 белых шара из 4 с вероятностями ((0/1), (7/12), (5/12))
  вытаскиваем 1-й шар, он белый с вероятностью (29/48)
  в корзине 6 лежат 1..3 белых шара из 4 с вероятностями ((0/1), (19/48), (29/48))
  вытаскиваем 1-й шар, он белый с вероятностью (125/192)
корзина 5 особенная
  вытаскиваем 1-й шар, он белый с вероятностью (2/3)
  в корзине 2 лежат 1..3 белых шара из 4 с вероятностями ((0/1), (1/3), (2/3))
  вытаскиваем 1-й шар, он белый с вероятностью (2/3)
  в корзине 3 лежат 1..3 белых шара из 4 с вероятностями ((0/1), (1/3), (2/3))
  вытаскиваем 1-й шар, он белый с вероятностью (2/3)
  в корзине 4 лежат 1..3 белых шара из 4 с вероятностями ((0/1), (1/3), (2/3))
  вытаскиваем 1-й шар, он белый с вероятностью (2/3)
  в корзине 5 лежат 1..3 белых шара из 4 с вероятностями ((1/3), (2/3), (0/1))
  вытаскиваем 1-й шар, он белый с вероятностью (5/12)
  в корзине 6 лежат 1..3 белых шара из 4 с вероятностями ((0/1), (7/12), (5/12))
  вытаскиваем 1-й шар, он белый с вероятностью (29/48)
итого, вероятности
  1 -> (2047/3072)
  2 -> (2045/3072)
  3 -> (509/768)
  4 -> (125/192)
  5 -> (29/48)
суммарная вероятность (13/20)



N>2) Допустим, что шар, вынутый из 5-й урны, оказался белым.

N> (2a) Какова вероятность, что шар, который переложили из 1-й урны во 2-ю, также был белым?

Это надо считать по Байесу...
Чёрт, всю теорию вероятности позабыл.

N> (2b) Какая вероятность, что это тот же самый шар?


Вероятность вытаскивания белого шара от начала до конца — 3/1280
(1/3+4*2/3)/5 * (1/4)^4
=============    ===  =- количество урн после первой
      |           +----- количество шаров в урне, после вброса
      +----------------- вероятность вынимания белого шара из первой урны

Байес, байес, ау...
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.