Конференция "Игры" » вероятность [Delphi, Windows]
 
  • tButton © (28.12.08 10:46) [0]
    господа, доброго времени суток
    подскажите пожалуйста формулу с помощью которой можно узнать
    какова вероятность что random(a) > random(b)
    где a и b - целые числа
  • @!!ex © (28.12.08 10:54) [1]
    1-(b-min)/(max-min)
    где max и min - границы действия random
  • @!!ex © (28.12.08 10:55) [2]
    Стоп. Не прав. Этож для фиксированного b.
    Для рандомов - вероятность статичная и равна 0.5
  • @!!ex © (28.12.08 11:01) [3]
    если хочется уж совсем точно:
    (1-1/(max-min))/2
  • tButton © (28.12.08 11:04) [4]

    > Для рандомов - вероятность статичная и равна 0.5

    не согласен
    допустим а=4
    и б=2
    random(а) принимает знаечения 0-4
    random(b) принимает значения 0-2
    (да, рэндом немного не дельфийский)
    т.о.
    random(a) имеет два значения при которых он заведомо больше random(b)
    т.е. в 6 из 30 случаев он заведомо больше, что уже гарантирует отличие от 50/50
  • tButton © (28.12.08 11:05) [5]

    > если хочется уж совсем точно:
    > (1-1/(max-min))/2

    извините, а можно в терминах имеющихся в условии задачи?
  • @!!ex © (28.12.08 11:09) [6]
    Удалено модератором
  • @!!ex © (28.12.08 11:14) [7]
    тогда два случая.
    первый, когда a>b
    1/(a-b)+0.5*(b/a)-1/b
    второй, когда b>a
    0.5*(a/b)-1/a

    Вроде так.
  • @!!ex © (28.12.08 11:16) [8]
    Удалено модератором
  • @!!ex © (28.12.08 11:21) [9]
    Чотж я так ткуплю то. :(
    в первуом случае вероятность складывается из двух диапазонов.
    первый:
    когда random(a) заведомо больше random(b), потому что находится выше самого b.
    Эта вероятность:
    (a-b)/a
    второй:
    Это когда random(a) в пределах b.
    Тогда:
    0.5*(b/a) - 1/b
    1/b - это вероятность, что они равны.

    (a-b)/a + 0.5*(b/a) - 1/b

    А второй случай я вроде правильно написал.
  • tButton © (28.12.08 11:21) [10]
    программа осуществляющая простой перебор подсчитала, что в приведенном мною выше примере
    A > B с вероятностью 60%
    A < B с вероятностью 20%
    A = B с вероятностью 20%

    при а=2 и б=1 - соответственно
    50%, 16.67%, 33.33%

    при а=10 и б=5
    68.18%, 22.73%, 9.09%

    вывести бы из всего этого закономерность, ведь при больших значениях а и б, последовательный перебор становится решением неприемлимым
  • @!!ex © (28.12.08 11:23) [11]
    > [10] tButton ©   (28.12.08 11:21)

    смотри 9.
    Вроде там все правильно. :)
  • tButton © (28.12.08 11:30) [12]
    экспериментальным путем
    А = B с вероятностью
    min(A, B) + 1 / ((A + 1) * (B + 1))
    (+1 - это нулевые значения)
  • tButton © (28.12.08 11:32) [13]

    > @!!ex ©   (28.12.08 11:23) [11]

    нет. там не правильно. результаты перебора вообще никак не сходятся с результатами вычисления по формуле
    для A > B и A < B формула выдает отрицательные значения
  • tButton © (28.12.08 11:39) [14]
    а вот тут начинается интересное!
    при любом максимальном числе
    шанс что рэндом от минимального будет меньше, чем рэндом от максимального
    равен
    сумма чисел от 1 до минимального / общее количество случаев
    т.е

    x = min(A, B)
    y = max(A, B)
    вероятность random(x) < random(y) =
    ( (1 + x) * x ) / 2
    _______________ (< дробная черта)
    ( (A + 1) * (B + 1) )
  • @!!ex © (28.12.08 11:59) [15]
    > [13] tButton ©   (28.12.08 11:32)

    Каким это макаром она выдает отрицательные значения? :)))
  • tButton © (28.12.08 16:04) [16]
    @!!ex ©   (28.12.08 11:59) [15]
    элементарно
    скопипастеная формула
    для исходных 5 и 10 выдает следующий результат
    A > B -10.00% [22.73%]
    A < B -19.75% [68.18%]
    A = B 10.00% [9.09%]
    * в квадратных скобках - результат полученый перебором
  • Servy © (28.12.08 19:54) [17]
    Рассматривал случай a <= b.
    r(a) - выпавший random(a). P:r(a)=x - вероятность события (random(a) > random(b)) при условии, что r(a) = x.

    (P:r(a)=0)  =  0 / b;   // очевидно, 0 не больше никакого числа
    (P:r(a)=1)  =  1 / b;   // если в random(a) выпала единица, то у нас есть 1 шанс (что в random(b) выпадет 0), всего random(b) может выдать b равновероятных значений.
    (P:r(a)=2)  =  2 / b;
    ...
    (P:r(a)=a-1) = (a-1) / b; // числа больше a-1 выпасть не могут

    Полная вероятность события (random(a) > random(b)):

    TotalP = P(r(a)=0) * (P:r(a)=0) + P(r(a)=1) * (P:r(a)=1) + ... + P(r(a)=a-1) * (P:r(a)=a-1);

    где P(r(a)=x) - вероятность наступления события r(a) = x. Очевидно, что эта вероятность равна 1/a для любого x из [0..a-1]. Тогда:

    TotalP = (1/a) * (0+1+2+...+a-1)/b = (a-1)*a/(2*a*b) = (a-1)/(2*b).

    Возьмем a = 1. Тогда шанс равен 0 (random(a) всегда выдает 0).
    Возьмем a = 2, b = 3. По формуле, вероятность 1/6. Все возможные комбинации выпадения random(a) и random(b) (каждая из которых равновероятна):
    0 - 0
    0 - 1
    0 - 2
    1 - 0
    1 - 1
    1 - 2

    условию random(a) > random(b) удовлетворяет только четвертая (1 - 0), следовательно, формула похожа на правильную :).

    Второй случай - (a > b) рассматривается по аналогии, (там условные вероятности (P:r(a)=x) при x>=b будут равны 1), мне сейчас лень считать.

    PS. Извиняюсь за не слишком удобные обзначения, на бумажке оно выглядит лучше :).
  • Servy © (28.12.08 21:23) [18]
    > допустим а=4
    > и б=2
    > random(а) принимает знаечения 0-4
    > random(b) принимает значения 0-2
    > (да, рэндом немного не дельфийский)

    Извиняюсь, пропустил этот момент. Формула для вашего Random'а получится несложным заменой a и b на a+1 и b+1 соответственно (так как ваш Random(5) равнозначен стандартному Random(6)). При a <= b получим TotalP = a/(2*(b+1)).
  • @!!ex © (29.12.08 02:28) [19]
    хз. я запутался окончательно.
 
Конференция "Игры" » вероятность [Delphi, Windows]
Есть новые Нет новых   [134431   +5][b:0][p:0.001]