T>C = K1 A1 A2 + ... + KN A1 A1, Ki = вероятность выбора iго ящика T>A1 — вытащить белый шарик, A2 — вытащить еще раз белый шарик (второй раз) T>с учетом того что шариков белых стало на один меньше: T>P(Ki A1 A2) = P(Ki) P(A1 A2|Ki) = 1/N * (i-1)*(i-2)/((N-1)(N-2)) T>Вопрос такой тогда — если вы правы и овтет 0,5 то в чем моя ошибка?
ты считаешь, что Ki -- вероятность выбора iго ящика это 1/N
Но нас просят посчитать вероятность вытаскивания двух белых шариков УЖЕ ПОСЛЕ того как один белый шарик уже известно, что вытащен.
Это апостериорная вероятность, и она может отличаться (и отличается) от априорной вероятности, которая была в начале.
Скажем, если идут муж и жена, то вероятность того, что муж негр -- это, скажем, 10%
Если же мы уже узнали, что жена негритянка, то вероятность того, что муж негр (или мыщьх) резко повышается.
Здравствуйте, Буравчик, Вы писали:
Б>Здравствуйте, Кодт, Вы писали:
К>>Есть n ящиков, в каждом из которых лежат k белых и n-k чёрных шариков (k последовательно принимает значения 1..n). К>>Случайным образом выбрав ящик, мы запустили туда руку и вынули шарик. Он оказался белым. К>>Какова вероятность того, что если мы вынем оттуда ещё два шарика, они тоже окажутся белыми?
Б>Как не странно, но для любого N получается ответ 0.5
Б>Вот так решал:
Б>
Я не понял ваше решение — вы выбираете корзину k, при условии что вытащили оттуда изначально белый шар?
Это как понять вроде же должно быт наоборот — при усолвии что выбрали корзину k, вероятность того что вытащили оттуда шарик белый,
Сам расчет : считали P1 = k / (сумма по C(k)) Какой в этом смысл?
Если вы считали вероятность вытащить белый шарик при условии, что выбрали ящик с номером k, то вероятность будет 1/N * k/N
Поясните пожалуйста что вы считали я не понял...
В моем новом решении примерно такой же подход, но вероятность которая у вас P1 у меня вычислена как просто 1/N — вероятность выбрать ящик k. Так как задача изменилась
когда мы вытащили шарик оттуда — нам не важно какова вероятност того что мы выберем ящик и вынем оттуда первый шарик — а только тот факт что мы оттуда выберем еще два белых шарика,
задача получается следующей — какова вероятность того, что мы выберем два подряд белых шарика после того как выбрали наугад ящик где ящик под номером k содержит k-1 белых шариков при общем количестве шариков равным N-1.
Разве я не прав?
Здравствуйте, Буравчик, Вы писали:
Б>Здравствуйте, tsaple, Вы писали:
T>>Сам расчет : считали P1 = k / (сумма по C(k)) Какой в этом смысл?
Б>P1(k) — вероятность того, что первый белый шар был вытащен из корзины k. Б>По хорошему, надо было написать P1 = C(k) / (сумма по C(k)).
Поясню.
По теореме Байеса: P(Ak|B) = P(B|Ak) * P(Ak) / SUM P(B|Ak)*P(Ak)
событие Ak — выбор корзины k
событие B — вытаскивание белого шара (первого)
P(Ak) — вероятность выбора корзины (до эксперимента): 1/n
P(B|Ak) — вероятность вытащить белый шар, если выбрана корзина k: k/n
P(Ak|B) — вероятность выбора корзины k при условии что вытащен белый шар:
P(Ak|B) = k/n * 1/n / SUM (k/n * 1/n) = k * 1/n^2 / (1/n^2 * SUM(k)) = k / SUM(k)
На пальцах, если N стремится к бесконечности, то вероятность достать 2 подряд шара одного цвета равна 1/4.
Если же N не стремится к бесконечности, то зайдем через матожидание.
Матожидание кол-ва белых шаров до начала событий соответственно:
1. n/2
2. (n/2)-1
3. (n/2)-2
Вероятности каждого события соответственно:
1. (n/2)/n
2. ((n/2)-1)/(n-1)
3. ((n/2)-2)/(n-2)
По условию задачи надо умножить вероятности (2) и (3):
Видно, что в пределе выражение стремится к 1/4, т.е. проходит проверку на здравый смысл.
Угу, сократил выражение, и понял, что оно не верно:
Потому что кол-во шаров не одинаковое, так же не учел специальное распределение по ящикам... Действительно, чуть сложнее выходит в аналитическом виде.
Вероятность, что мы выбрали правильный самый ящик в первый раз: (n-2)/n. Предлагаю подсчитать вероятность двух следующих событий в заведомо правильных ящиках и умножить на эту вероятность. Рассуждения такие же как предыдущем посту, только теперь:
— кол-во белых шаров всего w=(n^2+n)/2, черных b=n^2-w;
— кол-во шаров в неправильных ящиках w'=3, b'=2n-3;
— считаем вероятности как в предыдущем посту для w"=w-w', b"=b-b':
V>Формула многоэтажная, когда подставим выражения от n вместо w" и b", прямо сейчас сокращать лень...
я читаю в плоском режиме, поэтому непонятно на какой именно вопрос ты отвечаешь, но на вопрос топикстартера в первых же постах правильно ответили -- 0.5, без многоэтажных формул
Здравствуйте, dilmah, Вы писали:
D>но на вопрос топикстартера в первых же постах правильно ответили -- 0.5, без многоэтажных формул
Во-первых, там тоже было многоэтажные, просто Mathcad сократил. Во-вторых, там решение с вольными допущениями.
И разве тебя не смущает ваши 0.5? Предположим, что у нас кол-во ящиков N+1, т.е. имеем одинаковое кол-во белых и черных шаров. В этом случае мы имеем дело с идеальным равномерным распределением 0,5 для шаров любого цвета, где вероятность вытащить любую заведомую комбинацию из 3-х шаров = 1/8, а любую заведомую комбинацию из 2-х шаров = 1/4. Но, по условию задачи тот факт, что мы убрали N+1 ящик, где были только черные, не влияет на результат. Итого, вытащить остальные 2 белых шара в системе из N ящиков после первого белого будет в точности равно вероятности вытащить их же после белого в системе из N+1 ящиков, т.е. 1/4.
В том направлении, куда пошел Буравчик, надо было взять все комбинации вытаскивания 3-х шаров подряд, из них взять только случаи, где первый шарик белый и затем найти отношение кол-ва нужных комбинаций к общему из этого подмножества с первым белым шаром.
На всякий случай написал программу, получил 0.25 при любом N:
#include <stdio.h>
#include <xutility>
const int N = 10;
struct Variants { int var000, var0XX; };
// k - кол-во белых шаров в ящикеinline Variants iterate(int k) {
Variants vars = {0};
// итерация заведомо по первому белому шаруfor(int i1 = 0; i1 < std::min(k, N-2); i1++) {
for(int i2 = i1 + 1; i2 < (N-1); i2++) {
for(int i3 = i2 + 1; i3 < N; i3++) {
vars.var0XX++;
if(i2 < k && i3 < k) vars.var000++;
}
}
}
return vars;
}
int main(int argc, char* argv[])
{
Variants vars = {0};
for(int k = 1; k <= N; k++) {
Variants tmp = iterate(k);
vars.var000 += tmp.var000;
vars.var0XX += tmp.var0XX;
}
printf("%f", double(vars.var000)/(vars.var000 + vars.var0XX));
}
Здравствуйте, vdimas, Вы писали:
V>>На всякий случай написал программу, получил 0.25 при любом N: V>Ошибка в последнем выражении. Тоже получается 1/3... чудеса...
Мой вариант. Всегда получается ~ 0.5
# -*- coding: utf-8 -*-import random
# шар: БЕЛЫЙ и ЧЕРНЫЙclass Ball:
(WHITE, BLACK) = (0,1)
# корзина с шарамиclass Basket:
def __init__(self, total, whites):
# Создает корзину, в которой всего *total* шаров, из которых *whites* белых
self.total = total
self.whites = whites
def extractBall(self):
# Достает из корзины шар и возвращает его цвет. При этом шар из корзины изымается
ball_index = random.randint(1, self.total)
if ball_index <= self.whites:
self.total -= 1
self.whites -= 1
return Ball.WHITE
else:
self.total -= 1
return Ball.BLACK
# Есть n ящиков,
# в каждом из которых лежат k белых и n-k чёрных шариков
# (k последовательно принимает значения 1..n).
n = 20 # количество корзин
first_white = 0 # количество случаев, когда первым выпал белый шар
three_white = 0 # количество случаев, когда вытащили подряд три белых шараfor test in xrange(1000*1000):
# случайно выбираем корзину
k = random.randint(1,n)
busket = Basket(n, k)
# вытаскиваем первый белый шарif busket.extractBall() != Ball.WHITE:
continue
first_white += 1
# вытаскиваем еще два белых шараif busket.extractBall() != Ball.WHITE:
continue
if busket.extractBall() != Ball.WHITE:
continue
three_white += 1
print three_white * 1.0 / first_white
V>Это у тебя уже эксперимент. А я имел ввиду подсчитать кол-во варианта 0XX и 000 через полный перебор всевозможных исходов.
ты как-то неправильно считаешь исходы:
#!/bin/sh
generate_all()
{
n=$1
for k in $(seq 1 $n); do
for a in $(seq 1 $k); do
for b in $(seq 1 $n); do
for c in $(seq 1 $n); do
echo $k $a $b $c
done
done
done
done
}
filter_out_invalid()
{
awk '$2 != $3 && $2 != $4 && $3 != $4'
}
count_outcomes()
{
awk -vx=0 -vy=0 '{ if ($3 <= $1 && $4 <= $1) ++x; else ++y } END { printf "all
whites\t" x "\nfirst white but not all whites\t" y "\n" }'
}
$ generate_all 9 | filter_out_invalid | count_outcomes
all whites 1260
first white but not all whites 1260
ну, если 2 множества (эл.исходов), которые выглядят так соблазнительно просто, всегда содержат одинаковое кол-во элементов, то возникает соблазн найти какую-нибудь естественную биекцию между ними.