LINUX.ORG.RU

3 сундука по 2 монеты

 , , ,


14

2

Старая задачка. Нашел максимально точную формулировку, попрошу придерживаться её.

У нас есть три сундука, в каждом из которых лежит по две монетки.

В первом — две золотых. Во втором — две серебрянных. В третьем — одна золотая и одна серебрянная.

Мы выбираем сундук случайным образом и вслепую вытаскиваем оттуда монетку. Она оказывается золотой. Какова вероятность того, что следующая вытащенная из того же сундука монетка — тоже золотая?

Просьба, объяснить свое решение, если у вас ответ НЕ 1/2.

Я не вижу, где в условии задачи есть зависимость второго этапа от первого, поэтому считаю, что задача сводится к выбору из двух равновероятных вариантов, а предисловие - для того, что бы запутать и пустить в рассуждения с теоремой Байеса.

PS. Добавьте тег «тервер», плиз.

Deleted

Последнее исправление: Deleted (всего исправлений: 2)

Тред не будет полон без реализации на Haskell

module Main where

import System.Random (getStdRandom, randomR)
import Data.List

random :: Int -> IO Int
random n = getStdRandom . randomR $ (0, n)

chests = ["GG", "SS", "SG"]

test = do
  r <- random 2
  let ch = chests !! r
  n <- random 1
  return $ which ch n
  
which "GG" 1 = 1
which "GG" 0 = 1
which "SG" 1 = 2
which "SG" 0 = 0
which "SS" _ = 0

tests = test : tests 

main = do
    x <- sequence . take 10000 $ tests
    let y = filter (/=0) x
    let len = fromIntegral . length  $ y
    print $ map ((\x -> x / len) . fromIntegral . length) . group . sort $ y 

iamweasel
()
Ответ на: комментарий от alfix

случайный выбор != случайный выбор среди 3 сундуков

У нас есть три сундука
Мы выбираем сундук случайным образом

три
случайным образом

Зачем ты врешь?

winlook38 ★★
()
Ответ на: комментарий от Kroz

Она нигде никак не используется и ни на что не влияет

Ошибка вот тут. Проведи эксперимент, если расчеты не устраивают.

winlook38 ★★
()
Ответ на: комментарий от winlook38

случайный выбор != случайный выбор среди 3 сундуков

У нас есть три сундука
Мы выбираем сундук случайным образом

три
случайным образом

Зачем ты врешь?

Внимательно перечитайте условие:

Мы выбираем сундук случайным образом и вслепую вытаскиваем от туда монетку.

Мы выбираем не один из 3-х сундуков а одну из 6 монет. Потому что условие

Она оказывается золотой

Действует для монеты а не для сундука.

German_1984 ★★
()
Ответ на: комментарий от winlook38

Зачем придумывать альтернативные трактовки, когда есть четка формулировка?

Я ничего не придумываю а цитирую.

Еще раз:

Мы выбираем сундук случайным образом и вслепую вытаскиваем от туда монетку. Она оказывается золотой.

ОНА а не ОН

German_1984 ★★
()
Ответ на: комментарий от German_1984

Это никоим образом не говорит о том, из скольки сундуков выбиралась монета. Количество сундуков четко оговорено в условии. Выкидываешь один сундук - меняешь условие.

winlook38 ★★
()
Ответ на: комментарий от alfix

Мы сперва случайно выбираем сундук, а затем в нем случайно выбираем монету. Так написано в условии.

cvs-255 ★★★★★
()
Ответ на: комментарий от winlook38

Я не говорил про выкидывание сундуков.

Прошу прощения что ввязался в дискуссию не дочитав тред до начала. В том исходнике однозначна ошибка.

Мой ответ 2/3, о чем я писал чуть раньше: раз и два

Просто с аргументация что мы «сначала выбираем сундук» как раз характерна для тех кто защищает версию 1/2, со сторонниками этого лагеря в вас и перепутал.

German_1984 ★★
()
Ответ на: комментарий от alfix

if g in a: #если в нём есть золотая - иначе первая не сможет быть золотой

Вот в этом месте ошибка

В условии сказано

вслепую вытаскиваем от туда монетку. Она оказывается золотой

А вы проверяете что в сундуке хотя бы одна из двух золотая.

German_1984 ★★
()
Ответ на: комментарий от alfix

Хватит тупить уже, смысл не в виде монеты, а в том что последующая вытащенная (на 2-м этапе) будет такая же как и в первый раз вытащенная.

amorpher ★★★★★
()
Последнее исправление: amorpher (всего исправлений: 2)
Ответ на: комментарий от alfix

цитаты ваще из разных абзацев

И что? Это разные задачи? Или где-то между этими абзацами было сказано, что один из сундуков был уничтожен? Нет? Так зачем ты врешь?

winlook38 ★★
()
Ответ на: комментарий от amorpher

и ваще, это было пояснение к комментарию в коде для определённой трактовки условия (ты хоть смотри на что отвечаешь)

alfix
()
Ответ на: комментарий от alfix

Неважно к чему это было, есть задача в шапке. Если твой код отличается от задачи, тогда в чём проблема? Клиника только 😃

amorpher ★★★★★
()
Ответ на: комментарий от alfix

И поэтому ты решил забыть про часть условия? Хорошая аргументация, но не здесь.

winlook38 ★★
()
Ответ на: комментарий от alfix

А можете ради эксперимента убрать эту проверку и повторить эксперимент? У меня на рабочей машине нет возможности опробовать.

German_1984 ★★
()

Даже те кто дает 2/3, дают неправильное решение порой. Вот неправильное решение и запутывает тех кто считает 1/2.

Вот моё объяснение:

Рассмотрим 2 сундука, т.к у нас золотая монета в руках, то сундук с серебром нас не интересует.

Распишим вероятность для каждоый монеты из этих двую сундуков: 25% - первая золотая, 25% - вторая золотая, 25%-третья золотая 25%- четвертая серебреная.

Серебро нас не интересует:

33% - первая золотая, 33%- вторая золотая, 33% - третья золотая.

66% - что мы в первом сундуке. 33% - что мы в третьем сундуке.

Из этого следует что 66% что следующая монета золотая.

Woklex
()
Ответ на: комментарий от alfix

Что-то чем сильнее я вчитываюсь в исходники тем сильнее не понимаю что тут написано.

Для чего три вложенных цикла? Ты можешь четко назвать условие выхода из каждого цикла?

Сейчас попробовал написать свое на паскале (уж что есть под рукой)

const
  g = 1;
  s = 0;
  box: array [0..2, 0..1] of integer = ((g, g), (g, s), (s, s));

var
  a, i, c: integer;
  result: array [0..1] of integer;

begin
  c := 0;
  while c < 1000 do
  begin
    a := random(3);
    i := random(2);
    if box[a, i] = g then
    begin
      inc(result[box[a, 1-i]]);
      inc(c)
    end;
  end;
  Writeln(result[g], ',', result[s]);
end.
630,370

German_1984 ★★
()
Ответ на: комментарий от German_1984

У него там выдуманный цикл while True, который занимается типичным шлангованием. В ОП не говорится, что мы вытаскиваем монету из ящика до тех пор пока не вытащим золотую.

UPD: т.е. удали этот цикл и запусти - получишь то, что ожидаешь.

winlook38 ★★
()
Последнее исправление: winlook38 (всего исправлений: 1)

Я не вижу, где в условии задачи есть зависимость второго этапа от первого

Вероятность первым шагом вытащить золотую монету из первого сундука у тебя в два раза выше, чем из третьего (второй мы игнорируем). Потому перед началом второго этапа ты на 66,(6)% находишься в первом, и только на 33,(3) в третьем.

Мы не выбрасываем из головы это полезное знание, когда тянем вторую монету. Мы всё еще помним, что раз первая вытянутая монета оказалась золотой, то вероятность того, что это тот сундук, где две золотых больше (66%), чем тот сундук, где одна (33%). Мы тянем монету из того же сундука.

Вот зависимость. Математикой вам уже объясняли, но до вас не доходит.

Проверочная задача: в одном сундуке 2 золотых монеты, во втором 2 серебрянных, а в третьем 1 золотая и 99 серебрянных. Мы тянем монету - золотая. Мы, как вы тут уговариваете, забываем первый шаг и говорим, что теперь это точно 1 или 3, а значит шанс 50%? Нет, шанс вытянуть золотую монету из третьего сундука был мизерным, значит мы с большой вероятностью в первом сундуке.

Moonshine
()
Ответ на: комментарий от Woklex

т.к у нас золотая монета в руках, то сундук с серебром нас не интересует.

Да. Это конкретно по условию.
Но суть, если более точно описать смысл 2/3, в том что 3-й сундук нужен для вытягивания той же первой (золотой из условия) монеты и последующего её совпадения с вытягиваемой монетой во 2-й раз.

amorpher ★★★★★
()
Ответ на: комментарий от winlook38

Я тут поэкспериментировал. Если выкинуть сундук с серебром из рассмотрения или добавить еще два сундука чисто с серебром то результат не изменится :)

German_1984 ★★
()
Ответ на: комментарий от German_1984

У него просто с соображалкой туго, много раз говорил заменить слово «серебряная» на «золотая». Может и смысл бы понял, почему 2/3.
Хотя это и изменяет текст условия, но суть не меняется.

amorpher ★★★★★
()
Ответ на: комментарий от German_1984

Тогда в случае второго сундука программа повиснет: будет искать в нём золотую монету, которой там нет.

alfix
()
Последнее исправление: alfix (всего исправлений: 1)
Ответ на: комментарий от German_1984
const
  g = 1;
  s = 0;
  box: array [0..2, 0..1] of integer = ((g, g), (g, s), (s, s));

var
  a, c: integer;
  result: array [false..true] of integer;

begin
  for c := 0 to 999 do
  begin
    a := random(3);
    if (box[a, 0] = g) and (box[a, 1] = g) then inc(result[true]) //вторая тоже, как и первая, золотая (т. е. они обе золотые)
    else inc(result[false])
  end;
  Writeln(result[true], ', ', result[false])
end.
326, 674
alfix
()
Последнее исправление: alfix (всего исправлений: 2)
Ответ на: комментарий от winlook38

Эксперимент на C++

Проведи эксперимент, если расчеты не устраивают.

Факты - упрямая вещь

Логика:

TCounter answer[2]={0,0}; // Ответ: количество вытащенных монет каждого типа

const TCoin c_gold=0; // Золотая монета
const TCoin c_silver=1; // Серебряная монета

// Сундуки и монеты в них
const TCoin chest_coin[]={c_gold,c_gold , c_gold,c_silver, c_silver,c_silver};

// Единичный тест
TCoin test()
{
	uint chest_coin_choice; // Сундук и монета

	chest_coin_choice=rand()%6; // Выбирам сундук и монету
	if (chest_coin[chest_coin_choice] != c_gold ) // Если монета не золотая, прерываем тест
		throw EFirstNonGold();
	
	if (chest_coin_choice%2 == 1) // Если из сундука была выбрана вторая монета...
		chest_coin_choice--; // ... то следущей будет первая из того же сундука
	else
		chest_coin_choice++; // ... иначе следующей будет вторая из того же сундука
	
	return chest_coin[chest_coin_choice]; // Возвращаем следующую вытащенную монету 
}
Результат:
Вытащено золотых монет: 3432
Вытащено серебряных монет: 1671

То есть твоя правда.

Полный код здесь http://pastebin.com/UK98ZGK1 . Слабонервным не смотреть :)

P. S. + h578b1bde

Kroz ★★★★★
()

Теперь и на J

n =: 50000
f =: 3 : '(a=0 2)*.1=(?2){x{~a=:?3'
x =: 1 1 0 0 1 0 $~ n, 3 2
t%+/t=:+/f"2 x

0.668086 0.331914

iamweasel
()
Ответ на: Эксперимент на C++ от Kroz

Я уже делал эксперименты на пыхе здесь:
3 сундука по 2 монеты (комментарий) (см. вторую модель)
3 сундука по 2 монеты (комментарий)

Но, на мой взгляд, здесь проблема не в экспериментах как наглядных реализациях результатов умозаключений, а в трактовке условий задачи, причине выбора одного из возможных подходов к её решению. Как минимум моя четвёртая модель показывает неоднозначность первоначальных условий. Логика же сторонников ½, поборцев ⅔, оригиналов с ⅓ и реалистов 1 vs 0 мне ясна.

// Тут уже немного новых страниц наклепали, постараюсь в ближайшее время их осилить.

h578b1bde ★☆
()
Ответ на: комментарий от alfix

ну наконец-то

и на будующее — если не понимаешь смысла явления, то не пиши говно, челенджеров и прочего не будет

amorpher ★★★★★
()
Последнее исправление: amorpher (всего исправлений: 2)
Ответ на: комментарий от maloi

вероятности не зависят от того, знает вытаскивающий что-то или нет.

Тогда на самом деле вероятность вытащить вторую золотую монету будет составлять либо 1 либо 0 в зависимости от попадания в первый или третий сундук.

h578b1bde ★☆
()
Ответ на: Эксперимент на C++ от Kroz

Мне ещё понравилась одна из интерпретаций alfix, в которой монеты в сундуках лежат одна на другой (а ведь действительно, условие никак не оговаривает их взаимное расположение, т.е. допускается что оно может быть любым), вследствие чего мы вслепую будем тянуть верхнюю монету. И тут результат уже зависит от желания левой пятки складывающего монеты в сундуки.

h578b1bde ★☆
()
Ответ на: комментарий от h578b1bde

Но, на мой взгляд, здесь проблема не в экспериментах как наглядных реализациях результатов умозаключений, а в трактовке условий задачи,

Это же очевидно!

alfix
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.