-
господа, доброго времени суток
подскажите пожалуйста формулу с помощью которой можно узнать
какова вероятность что random(a) > random(b)
где a и b - целые числа
-
1-(b-min)/(max-min)
где max и min - границы действия random
-
Стоп. Не прав. Этож для фиксированного b.
Для рандомов - вероятность статичная и равна 0.5
-
если хочется уж совсем точно:
(1-1/(max-min))/2
-
> Для рандомов - вероятность статичная и равна 0.5
не согласен
допустим а=4
и б=2
random(а) принимает знаечения 0-4
random(b) принимает значения 0-2
(да, рэндом немного не дельфийский)
т.о.
random(a) имеет два значения при которых он заведомо больше random(b)
т.е. в 6 из 30 случаев он заведомо больше, что уже гарантирует отличие от 50/50
-
> если хочется уж совсем точно:
> (1-1/(max-min))/2
извините, а можно в терминах имеющихся в условии задачи?
-
Удалено модератором
-
тогда два случая.
первый, когда a>b
1/(a-b)+0.5*(b/a)-1/b
второй, когда b>a
0.5*(a/b)-1/a
Вроде так.
-
Удалено модератором
-
Чотж я так ткуплю то. :(
в первуом случае вероятность складывается из двух диапазонов.
первый:
когда 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
А второй случай я вроде правильно написал.
-
программа осуществляющая простой перебор подсчитала, что в приведенном мною выше примере
A > B с вероятностью 60%
A < B с вероятностью 20%
A = B с вероятностью 20%
при а=2 и б=1 - соответственно
50%, 16.67%, 33.33%
при а=10 и б=5
68.18%, 22.73%, 9.09%
вывести бы из всего этого закономерность, ведь при больших значениях а и б, последовательный перебор становится решением неприемлимым
-
> [10] tButton © (28.12.08 11:21)
смотри 9.
Вроде там все правильно. :)
-
экспериментальным путем
А = B с вероятностью
min(A, B) + 1 / ((A + 1) * (B + 1))
(+1 - это нулевые значения)
-
> @!!ex © (28.12.08 11:23) [11]
нет. там не правильно. результаты перебора вообще никак не сходятся с результатами вычисления по формуле
для A > B и A < B формула выдает отрицательные значения
-
а вот тут начинается интересное!
при любом максимальном числе
шанс что рэндом от минимального будет меньше, чем рэндом от максимального
равен
сумма чисел от 1 до минимального / общее количество случаев
т.е
x = min(A, B)
y = max(A, B)
вероятность random(x) < random(y) =
( (1 + x) * x ) / 2
_______________ (< дробная черта)
( (A + 1) * (B + 1) )
-
> [13] tButton © (28.12.08 11:32)
Каким это макаром она выдает отрицательные значения? :)))
-
@!!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%]
* в квадратных скобках - результат полученый перебором
-
Рассматривал случай 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. Извиняюсь за не слишком удобные обзначения, на бумажке оно выглядит лучше :).
-
> допустим а=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)).
-
хз. я запутался окончательно.