IPB

Добро пожаловать, гость ( Вход | Регистрация )

> Правила раздела

Публикующим:
     1. Задачу можно опубликовать двумя способами:
          - создав для нее отдельную тему с информативным названием;
          - добавив задачу в готовый сборник (например «Бескрылки», «Мини-задачи», «Вопросы ЧГК») или создав свой (например, «Загадки от /для Светы»).
     2. Если вы публикуете задачу, решение которой не знаете, напишите об этом. По умолчанию считается, что вам известен правильный ответ и вы готовы проверять других игроков.
Решающим:
     1. В темах запрещается писать ответы и подсказки, если возможность открытого обсуждения не оговорена отдельно (в случае открытого обсуждения для текста следует использовать цвет фона или белый, оставляя другим игрокам возможность самостоятельного решения).
     2. Правильность решения можно проверить, написав личное сообщение автору.

 
Ответить в эту темуОткрыть новую тему
> Новый взгляд на гарантированное решение, Мегамозг, монеты и вероятность
WildKOT
3.7.2015, 23:21
Сообщение #1


Новичок
*

Группа: Пользователи Braingames
Сообщений: 30
Регистрация: 6.4.2008
Пользователь №: 7 361



Подлые оккупанты посадили Мегамозга в тюрьму.
Стражники этой тюрьмы очень любили играть в игру, в которой были события, возникающей с разной вероятностью (от 0 до 1). Проблема в том, что эти вероятности могли быть любыми, даже иррациональными. Оккупанты использовали кубик, чтобы округлять вероятности, но это портило игру.
Тогда оккупанты решили заглянуть к Мегамозгу, дали ему монету и предложили придумать алгоритм бросания монеты для определения результата события в игре. После этого Мегамозг должен этот алгоритм реализовать 100 раз.
Может ли Мегамозг гарантированно освободиться, если он бессмертен.

Задача здесь на открытом обсуждении.
Особенно поощряется обсуждение понятия гарантированности.
Решение задачи я знаю, но с оговоркой на значение данного термина.

Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Sheogorath
6.7.2015, 16:19
Сообщение #2


Новичок
*

Группа: Пользователи Braingames
Сообщений: 41
Регистрация: 26.6.2011
Пользователь №: 26 256



Если я правильно понял, то оккупантам требуется алгоритм, который позволит получать числа от 0 до 1, в том числе -- иррациональные. Мегамозгу нужно придумать способ, как эти числа при помощи монетки получать, а потом его реализовать 100 раз.

Так вот,

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

Теперь принципиальный алгоритм определения числа:
sum = 0
1. Подкидываем монетку. Если орел -- то sum += 0.5
2. Подкидываем монетку. Если орел -- то sum += 0.25
...
N. Подкидываем монетку. Если орел, то sum += (0.5)^N
...
Продолжаем до бесконечности, последовательность будет сходиться к некоторому числу, вполне, быть может, иррациональному.


Но можно решить и практически:

Закручиваем монетку щелчком по ней и ждем, пока она упадет. От времени в секундах, за которое она упала, отнимаем их целое количество -- полученное число и есть наша вероятность. Возникает сложность с определением 0 и 1, но если вдруг остаток получится нулевым, то тогда можно подкинуть монетку и принять решение.
Такое решение работает даже при условии, когда ММ смертен.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Owen
6.7.2015, 16:43
Сообщение #3


Kорифей
****

Группа: Администраторы Braingames
Сообщений: 2 817
Регистрация: 6.3.2013
Пользователь №: 43 989



Практическое решение не годится совсем, точности ничего не хватит.
Теоретическое решение не годится, т.к. есть числа, которые за конечное число итераций достоверно не получатся, т.е. даже второе число уже не будет получено. Пример есть; в качестве упражнения предлагаю сконструировать такое иррациональное число самостоятельно, это несложно.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Sheogorath
6.7.2015, 16:51
Сообщение #4


Новичок
*

Группа: Пользователи Braingames
Сообщений: 41
Регистрация: 26.6.2011
Пользователь №: 26 256



QUOTE(Owen @ 6.7.2015, 16:43) *
Теоретическое решение не годится, т.к. есть числа, которые за конечное число итераций достоверно не получатся, т.е. даже второе число уже не будет получено.

За конечное число итераций, разумеется, все числа не получатся, но ММ-то бессмертен, так что может себе позволить одну бесконечную последовательность.
А как из одной бесконечной последовательности получить 100, я описал.

UPD. Хотя если бессмертие ММа понимать не как возможность получения бесконечной последовательности, а как возможность получения сколь угодно большой, но конечной, тогда да, не годится.

Сообщение было отредактировано Sheogorath: 6.7.2015, 16:57
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
WildKOT
22.7.2015, 16:48
Сообщение #5


Новичок
*

Группа: Пользователи Braingames
Сообщений: 30
Регистрация: 6.4.2008
Пользователь №: 7 361



1) Решение, при котором Мегамозг освободиться за бесконечное время не годится, так как это равносильно тому, что он не освободится.
2) Цель Мегамозга не в том, чтобы монетками набросать число от 0 до 1, а в том, чтобы сгенерировать событие, которое произойдет с заданной вероятностью.
3) Доп. условие Арифметические операции с числами (сложение, умножение) Мегамозг может выполнить за разумное конечное время
Подсказка: при правильном алгоритме Мегамозг справится быстро и сможет практически наверняка освободиться в течении суток
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
BuPTy03
22.7.2015, 17:04
Сообщение #6


....фей
****

Группа: Пользователи Braingames
Сообщений: 3 426
Регистрация: 30.8.2007
Из: Мозгва
Пользователь №: 2 974



Примечательно, что условие задачи вообще никак не помогает ответить на вопрос
QUOTE
Может ли Мегамозг гарантированно освободиться, если он бессмертен.

Если он не на пожизненном, то по-любому сможет, в противном случае, подозреваю, что правильный алгоритм - это заточить монетку и с её помощью потихоньку выносить стену в штанах как Энди Дюфрейн )


--------------------
First rule - I rule.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Sheogorath
22.7.2015, 20:32
Сообщение #7


Новичок
*

Группа: Пользователи Braingames
Сообщений: 41
Регистрация: 26.6.2011
Пользователь №: 26 256



QUOTE(WildKOT @ 22.7.2015, 16:48) *
сгенерировать событие, которое произойдет с заданной вероятностью.

Я не понял(
То есть, ММу изначально дано некое заданное значение вероятности (число), а он посредством монетки должен сгенерировать событие, вероятность которого есть это число?
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
WildKOT
4.8.2015, 15:17
Сообщение #8


Новичок
*

Группа: Пользователи Braingames
Сообщений: 30
Регистрация: 6.4.2008
Пользователь №: 7 361



QUOTE(Sheogorath @ 22.7.2015, 20:32) *
Я не понял(
То есть, ММу изначально дано некое заданное значение вероятности (число), а он посредством монетки должен сгенерировать событие, вероятность которого есть это число?

Да. Например если вероятность 0.75 - то он может бросить монетку 2 раза, и в качестве события выбрать то, что орел не выпадет ни разу.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Breghnev
4.8.2015, 22:08
Сообщение #9


Участник
**

Группа: Пользователи Braingames
Сообщений: 113
Регистрация: 8.5.2008
Из: Йошкар-Ола
Пользователь №: 7 813



QUOTE(WildKOT @ 4.8.2015, 15:17) *
Да. Например если вероятность 0.75 - то он может бросить монетку 2 раза, и в качестве события выбрать то, что орел не выпадет ни разу.

Если я не сошел с ума, то вероятность того, что орел не выпадет ни разу, равна вероятности того, что дважды выпадет решка, и это 0.5*0.5=0.25. Если же нам нужно получить 0.75, то нам нужно выбрать событие "орел выпадет хотя бы раз" (то есть событие противоположное событию "решка выпадет дважды") или что-то в этом духе.

Сообщение было отредактировано Breghnev: 4.8.2015, 22:09
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
WildKOT
14.8.2015, 20:29
Сообщение #10


Новичок
*

Группа: Пользователи Braingames
Сообщений: 30
Регистрация: 6.4.2008
Пользователь №: 7 361



QUOTE(Breghnev @ 4.8.2015, 22:08) *
Если я не сошел с ума, то вероятность того, что орел не выпадет ни разу, равна вероятности того, что дважды выпадет решка, и это 0.5*0.5=0.25. Если же нам нужно получить 0.75, то нам нужно выбрать событие "орел выпадет хотя бы раз" (то есть событие противоположное событию "решка выпадет дважды") или что-то в этом духе.

Верно. У меня была ошибка.
А вот если вероятность 1/3, все намного интереснее.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Лиходей
25.11.2015, 18:13
Сообщение #11


Участник
**

Группа: Пользователи Braingames
Сообщений: 174
Регистрация: 9.12.2008
Пользователь №: 11 533



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

Принцип:
Изначально вероятность находится в рамках от 0 до 1. При "удачном" броске монетки нижняя граница вероятности идёт вверх, сокращая диапазон вероятности вдвое. При неудачном - аналогично верхняя граница вниз.
Если искомая вероятность находится в диапазоне, продолжаем кидать монетку, уменьшая диапазон.
Если искомая вероятность ниже, значит событие не произошло, выше - произошло (или наоборот, там в программе похоже две ошибки, компенсирующие друг друга).

Программка на Python:
CODE
from random import random

def flip_coin():
    return random() > 0.5

def calc(prob):
    flip_count = 0
    prob_start = 0.
    prob_end = 1.
    while True:
        if prob<=prob_start:
            return [False, flip_count]
        elif prob>=prob_end:
            return [True, flip_count]
        flip_count += 1
        if flip_coin():
            prob_start += (prob_end-prob_start)/2
        else:
            prob_end -= (prob_end-prob_start)/2

def test(prob, iterations = 10**6):
    sucess = 0
    for _ in xrange(iterations):
        if calc(prob)[0]:
            sucess += 1
    print "Expected: %f, resulting: %f" % (prob, float(sucess)/iterations)

def test2(prob, iterations = 10**6):
    sucess = 0
    flip_count = 0
    for _ in xrange(iterations):
        flip = calc(prob)
        if flip[0]:
            sucess += 1
        flip_count += flip[1]
    print "Expected: %f; resulting: %f; flips: %f per prob" % \
          (prob, float(sucess)/iterations, float(flip_count)/iterations)
    
test2(0, 10**7)
test2(1, 10**7)
test2(0.5, 10**7)
test2(0.75, 10**7)
test2(0.125, 10**7)
test2(0.125+0.000001, 10**7)
test2(0.125-0.000001, 10**7)

Результаты симуляции (10М тестов):
требуемая вероятность; полученная вероятность; в среднем брошено монет для получения одной вероятности
Expected: 0.000000; resulting: 0.000000; flips: 0.000000 per prob
Expected: 1.000000; resulting: 1.000000; flips: 0.000000 per prob
Expected: 0.500000; resulting: 0.499721; flips: 1.000000 per prob
Expected: 0.750000; resulting: 0.749866; flips: 1.500128 per prob
Expected: 0.125000; resulting: 0.125103; flips: 1.749930 per prob
Expected: 0.125001; resulting: 0.124900; flips: 2.000272 per prob
Expected: 0.124999; resulting: 0.124988; flips: 2.000092 per prob
Expected: 0.062500; resulting: 0.062517; flips: 1.875052 per prob
Expected: 0.062501; resulting: 0.062611; flips: 2.000211 per prob
Expected: 0.062499; resulting: 0.062519; flips: 2.000323 per prob

Expected: 0.333333; resulting: 0.333207; flips: 2.000563 per prob
Expected: 0.333343; resulting: 0.333406; flips: 1.999871 per prob
Expected: 0.333323; resulting: 0.333547; flips: 2.000427 per prob
Expected: 0.166667; resulting: 0.166593; flips: 1.999216 per prob
Expected: 0.166677; resulting: 0.166559; flips: 2.000446 per prob
Expected: 0.166657; resulting: 0.166683; flips: 1.999807 per prob


Сообщение было отредактировано Лиходей: 25.11.2015, 18:24


--------------------
F7F7EE
EFEFDF
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0 -

 



- Упрощённая версия Сейчас: 27.4.2024, 2:10
Яндекс.Метрика