Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];

Вниз

Распределение случайных чисел   Найти похожие ветки 

 
Putnik   (2005-01-19 14:28) [0]

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


 
Kerk ©   (2005-01-19 14:38) [1]

Вероятность получения значения считай диапазоном.
Получи одно случайное число [0,1) и смотри в какой по счету диапазон оно попало.


 
Digitman ©   (2005-01-19 14:44) [2]

for или repeat..until вряд ли более изящные способы, но без цикла здесь вряд ли обойтись

посмотри на станд.ф-цию генератора ПСП с гауссовым распределением

function RandG(Mean, StdDev: Extended): Extended;
{ Marsaglia-Bray algorithm }
var
 U1, S2: Extended;
begin
 repeat
   U1 := 2*Random - 1;
   S2 := Sqr(U1) + Sqr(2*Random-1);
 until S2 < 1;
 Result := Sqrt(-2*Ln(S2)/S2) * U1 * StdDev + Mean;
end;

как видишь, Борланд реализовал это именно в цикле


 
Putnik   (2005-01-19 15:00) [3]

Спасибо большое! Наверное, так действительно правильней


 
default ©   (2005-01-19 15:03) [4]

Putnik   (19.01.05 14:28)
поскольку число разрядов под действительное число представляемое вероятность конечно, то можно считать его рациональным числом, это многое даёт
то есть такое число которое представимо ввиде a/b, где
a < b, и оба они - натуральные числа
значит для генерации заданного числа с заданной рациональной вероятностью достаточно выполнить строку Random(b+1)
считая исходами благоприятсвующими наступлению заданного события(получению данного действительного числа), например, первые a чисел генерируемых рандомом
то есть если Random(b)>a-1 то заданное действительное число выпало
вот и всё
если вероятности есть рациональные чи


 
default ©   (2005-01-19 15:05) [5]

Putnik   (19.01.05 14:28)
поскольку число разрядов под действительное число представляемое вероятность конечно, то можно считать его рациональным числом, это многое даёт
то есть такое число которое представимо ввиде a/b, где
a < b, и оба они - натуральные числа
значит для генерации заданного числа с заданной рациональной вероятностью достаточно выполнить строку Random(b)
считая исходами благоприятсвующими наступлению заданного события(получению данного действительного числа), например, первые a чисел генерируемых рандомом
то есть если Random(b)>a-1 то заданное действительное число выпало
вот и всё


 
default ©   (2005-01-19 15:08) [6]

блин, сильно тороплюсь
"то есть если Random(b)>a-1 то заданное действительное число не выпало, иначе выпало"


 
Putnik   (2005-01-19 15:09) [7]

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


 
Putnik   (2005-01-19 15:16) [8]

В общем это наверное так
x,p -массивы

l:=lenght(x);
a:=random(1);
i:=1;
s:=p[i];
while s<a do
begin
inc(i);
s:=s+p[i];
end;
result:=x[i];


 
default ©   (2005-01-19 15:20) [9]

Putnik   (19.01.05 15:09) [7]
я думал для одного надо
но можно и для всех адапатировать
разыгрываем первое число если оно не выпало значит выпало какое-то другое, теперь разыгрываем второе число, если оно не выпало - третье и тд


 
default ©   (2005-01-19 15:49) [10]

+[9]
можно обойтись одним вызовом рандома
допустим 1 выпадает с вероятностью 0.255, 2 с вероятностью 0.5 и 3 с вероятностью 1-(0.255+0.5)=0.245
0.255=255/1000, 0.245=245/1000, 0.5=(100/100)(5/10)=500/1000
делаем рандом Random(1000) и сопоставляя, к примеру, первые 255 чисел рандома выпадению единицы, следующие 245 выпадению двойки и остальные выпадению тройки делаем вывод какое число выпало
вот и всё)


 
default ©   (2005-01-19 16:04) [11]

вообщем почти тоже самое что [8]
так можно было бы делать если бы Random давал только цеоые числа



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.04 c
1-1105698951
Unknown
2005-01-14 13:35
2005.01.30
Application.CreateForm


4-1102580573
fynjy1984
2004-12-09 11:22
2005.01.30
Как определить открыт или закрыт лоток CD-Rom a


14-1105292973
Kerk
2005-01-09 20:49
2005.01.30
Чего за нахрен?


3-1103794357
ks13
2004-12-23 12:32
2005.01.30
Проблема с таблицами, или с приложением?


4-1102606790
Иван2
2004-12-09 18:39
2005.01.30
Можно мне пример привести, как на окошке api текст написать?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский