Ответы пользователя по тегу Теория вероятностей
  • Как запрограммировать нахождение стационарного распределения методом Гаусса?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Переписываете первые 3 строчки в виде
    p1*(0.1967-1) + p2*0.4561 + p3*0.3321 + p4*0.2982 = 0
    p1*0.0750 + p2*(0.0553-1) + p3*0.1986 + p4*0.0325 = 0
    p1*0.2239 + p2*0.4863 + p3*(0.0291-1) + p4*0.3382 = 0

    Четвёртая не нужна - она является их линейной комбинацией.
    Добавляете к ним строчку
    p1*1+p2*1+p3*1+p4*1=1
    Получаете квадратную систему линейных уравнений. Решаете её методом Гаусса на любом известном вам языке - и всё.
    Ответ написан
    1 комментарий
  • Как найти вероятность того, что точка находится от центра на расстоянии меньшем r?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    1. Найти площадь области, содержащей все точки, находящиеся от центра на расстоянии, меньшем r
    2. Понять, чему равна вероятность того, что точка попадёт в круг радиуса R
    3. Найти площадь круга радиуса R
    4. Воспользоваться тем, что вероятности пропорциональны площадям.

    Просто интересно, какой из этих пунктов вообще может вызвать затруднения.
    Ответ написан
    Комментировать
  • Как выбрать случайным образом победителя, учитывая его шанс на победу?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Лучше брать дробное случайное число:
    double r=frand()*total_chance_sum.
    (как сегодня называется frand() я не знаю - должно выдавать случайное число от 0 до 1). Условие current_sum <= r не нужно, оно выполняется всегда.
    Если хотите повысить шансы тех, кто делал большие ставки - можете возвести эти ставки в квадрат (т.е. если цены - 0.5, 1, 2, то шансы на победу будут 1/21, 4/21, 16/21). Не знаю, хорошо ли это.

    Вообще, не очень понятно, как работает
    current_sum += items[i].chance
    если сумма целая, а ставка дробная. Она не ругается на потерю точности?
    Ответ написан
  • Каково равновесное расположение шести цифр на додекаэдре?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Расположить как угодно, лишь бы каждая цифра встречалась ровно на двух гранях. Считается, что у правильного многогранника вероятность выпадения каждой грани одинакова.
    Если боитесь, что цифры будут разного веса и более тяжелая будет оказываться внизу чаще - расположите одинаковые цифры на противоположных гранях. Тогда они друг друга уравновесят.
    Ответ написан
    4 комментария
  • Как выразить член из формулы Бернулли?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    По-моему, это на центральную предельную теорему. При больших M количество дошедших порций будет иметь нормальное распределение с матожиданием P*M и дисперсией P*(1-P)*M. Вам надо подобрать M так, чтобы значение функции распределения в точке A=N*M/100 (это количество порций, которые надо получить) было не больше 1-S, где S - "наперёд заданная вероятность".
    Это можно сделать только если P > N/100. В противном случае сообщение надо отправлять одним куском. Если же P <= N/100 и при этом P < S, то задача неразрешима.
    Ответ написан
    Комментировать
  • Взлом шифра Вернама(одноразовый блокнот). Как сделать?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Предполагаем, что известно, на каком языке сообщения, и статистика распределения символов (а также сочетаний по 2, 3 символа...)
    Зависит от того, сколько у нас сообщений.
    Если их достаточно много, то строим статистику символа с каждым порядковым номером по всем сообщениям (символ k встретился P[k] раз). Эта статистика должна получаться из стандартной статистики L для языка как P[k]=L[k^c], где c - искомый символ. Для каждого c считаем вероятность того, что на этом месте оказался именно он, и дальше начинаем искать наиболее вероятный текст для какого-нибудь сообщения.
    Если сообщений только два, то придётся использовать распределение групп символов, смотреть, из каких сочетаний наиболее вероятно получится фрагмент из C1^C2, и дальше распутывать их с помощью каких-нибудь цепей Маркова. Не знаю, получится ли.
    Сильно облегчит дело, если сообщения - фрагменты обычных ASCII-файлов, со всеми знаками пунктуации и переводами строк. Можно воспользоваться тем, что перевод строки имеет код 0D,0A, пробел - 20, другие знаки пунктуации - от 21 до 3F, большие буквы - от 41 до 5A, маленькие - от 61 до 7A (это если текст английский. Для русского ещё лучше). Смотрим на поведение битов 40 и 20. Если в каком-то месте в разных закодированных сообщениях значения бита 40 различны, значит в некоторых это буква, в остальных - знак пунктуации. Причём, буква вероятнее в тех, в которых более частое значение. Немного похимичив, получаем разделение текстов на слова, строки и предложения. Заодно в части сообщений проявляются некоторые буквы. Дальше работаем с распределением одно-, двух- и трёхбуквенных слов. Может быть, повезёт.
    Ответ написан
    5 комментариев
  • Сколько нужно завести друзей в Facebook, чтобы с вероятностью близкой к 100% каждый день в году поздравлять с днем рождения хотя бы одного друга?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Если надо найти точную вероятность того, что все дни рождения заполнены, то формула получается сложной. Эквивалентная формулировка - найти количество M-значных чисел в системе счисления по основанию N, в которых встречаются все N цифр.
    Рассматриваем наборы из N чисел a1,a2,a3,...,aN, для которых ai>=0 и a1+a2+...+aN=M-N, и по всем таким наборам (их С(M-1,N-1), наборы с разным порядком считаются разными) считаем сумму S величин 1^a1+2^a2+...+N^aN. Тогда искомое количество чисел равно S*N!, а искомая вероятность - S*N!/(N^M).
    Приближенную вероятность, когда M заметно больше N, найти проще. Вероятность того, что в определённый день ни одного дня рождения не будет, равна (1-1/N)^M, и вероятность того, что хотя бы один день рождения будет каждый день - (1-(1-1/N)^M)^N (здесь мы считаем события независимыми, что вообще говоря, неправда). При больших N и M/N это можно оценить как exp(-N*exp(-M/N)). Если N=365, то для достижения вероятности 99% нужно 3833 друга, а для 99.9% - 4675 друзей.
    Наличие 29 февраля ещё несколько усложняет картину.
    Ответы на вопросы 1-5 при N=366: 2041, 2295, 2617, 3844, бесконечность.

    Уточнение: число S, которое получается в точном решении, это число Стирлинга второго рода S(M,N). По ссылке есть простая явная формула.
    Ответ написан
    3 комментария