|
Генератор псевдослучайных чисел |
|
|
|
Apr 5 2007, 14:50
|
Частый гость
 
Группа: Свой
Сообщений: 76
Регистрация: 21-03-07
Пользователь №: 26 378

|
Удивительно как вы неуклонно не хотите думать. Ведь все же уже разжевано до безобразия! Поймите, что именно мышление ведет к прогрессу и нельзя этой функции, данной нам свыше, допускать атрофироваться. Решение задачи можно сравнить с написанием картины - один, два штрижка и она превращается в шедевр. Но художник, опирается на внутренее чувство окружающего мира, а мы - на мышление(!).
Посмотрите этот алгоритм, и посчитайте количество операций, и если оно превысит, то смело бросьте в меня камень.
R=[]; s=0; delLine = zeros(12,1); mas=zeros(1,256); for i=1:10000, a = randint(1,1,256)+1; v = a - 128; s = s + v - delLine(end); delLine = [v; delLine(1:end-1)]; g = mas(a); mas(a) = s; R=[R;g]; end;
ps меня удивило, что Вы, Олдрин, непонаслышке знакомы с синклером, думаю с радио-86рк тоже. Чувствуется старая закалка, не то, что нынешние студенты, которые живут с ожиданием, что все за них сделают...С Вами приятно общаться, но все же, настоятельно рекомендую вникать глубже в суть задач...есть у Вас такой небольшой порочек...
|
|
|
|
|
Apr 5 2007, 15:10
|

Гуру
     
Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874

|
Цитата(Макс_Мат @ Apr 5 2007, 15:50)  Удивительно как вы неуклонно не хотите думать. Ведь все же уже разжевано до безобразия! Поймите, что именно мышление ведет к прогрессу и нельзя этой функции, данной нам свыше, допускать атрофироваться. Решение задачи можно сравнить с написанием картины - один, два штрижка и она превращается в шедевр. Но художник, опирается на внутренее чувство окружающего мира, а мы - на мышление(!).
Посмотрите этот алгоритм, и посчитайте количество операций, и если оно превысит, то смело бросьте в меня камень.
R=[]; s=0; delLine = zeros(12,1); mas=zeros(1,256); for i=1:10000, a = randint(1,1,256)+1; v = a - 128; s = s + v - delLine(end); delLine = [v; delLine(1:end-1)]; g = mas(a); mas(a) = s; R=[R;g]; end;
ps меня удивило, что Вы, Олдрин, непонаслышке знакомы с синклером, думаю с радио-86рк тоже. Чувствуется старая закалка, не то, что нынешние студенты, которые живут с ожиданием, что все за них сделают...С Вами приятно общаться, но все же, настоятельно рекомендую вникать глубже в суть задач...есть у Вас такой небольшой порочек... Постепенно переходим к криптографии? Мышление не заменяет образование. Кнута Вы ведь так и не прочитали? Да, Вы избавились от сильной связи между соседними отсчетами. С третьей попытки. Все равно, без тщательного анализа нельзя утверждать, что Ваш доморощенный алгоритм генерирует достаточно хорошие случайные числа. Критериев их качества ведь до фига. К сожалению, незнание недостатков обычно не устраняет сами недостатки. P.S. РКшки у меня не было. Журналы Радио читал. Но тогда оставалось только завидовать друзьям. С Синклерами, действительно, знаком не понаслышке. Хорошая была школа.
--------------------
Пишите в личку.
|
|
|
|
|
Apr 5 2007, 15:41
|

Гуру
     
Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874

|
Цитата(Макс_Мат @ Apr 5 2007, 16:16)  Это не доморощенный алгоритм. Он подробно исследован и запатентован. Я собственно оттуда и узнал о нем. Автора не помню. Кстати, кто-то из соотечественников, Чикин, кажется... Если алгоритм опубликован и подробно исследован рядом компетентных в вопросе исследователей - это, конечно, совершенно другое дело. Тогда ему можно до некоторой степени доверять. Конечно, после обнаружения первоисточника и проверки корректности реализации. Мелочи могут быть критичными. Ну так ведь первые две Ваши реализации ведь были имменно доморощенными? P.S. Помню, некоторое время назад прочитал сообщение, что в каких-то вычислениях по методу Монте-Карло было обнаружено систематическое смещение, потому что использовался недостаточно хороший генератор случайных чисел. И так бывает.
--------------------
Пишите в личку.
|
|
|
|
|
Apr 5 2007, 16:08
|

Гуру
     
Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874

|
Цитата(Макс_Мат @ Apr 5 2007, 16:57)  ps Кстати, Вы не смотрели матлабовский генератор? Уж слишком подозрительно граммотно он сделан. А алгоритмиками матлабовцы не хотят делиться, или я плохо искал... Что думаете? Нет, не смотрел. Вопрос в общем-то детально меня не особо интересовал. Работает - и ладно, особо важные исследования с ним я не проводил. Это поможет? Цитата % References % % [1] C.B. Moler (2004) Numerical Computing with MATLAB, SIAM, 336pp. % Available on-line at http://www.mathworks.com/moler. % % [2] G. Marsaglia and W.W. Tsang (2000) "The Ziggurat Method for Generating % Random Variables", Journal of Statistical Software, 5(8). Available on-line % at http://www.jstatsoft.org/v05/i08/. % % [3] G. Marsaglia and W.W. Tsang (1984) "A Fast, Easily Implemented Method % for Sampling from Decreasing or Symmetric Unimodal Density Functions", % SIAM Journal of Scientific and Statistical Computing, 5(2):349-359. % % [4] Knuth,D.E. (1998) Seminumerical Algorithms, volume 2 of The Art of % Computer Programming, 3rd ed., Addison-Wesley.
--------------------
Пишите в личку.
|
|
|
|
|
May 1 2007, 22:50
|
Частый гость
 
Группа: Новичок
Сообщений: 173
Регистрация: 3-09-04
Из: Moscow
Пользователь №: 595

|
Для автора, думаю, через полгода запоздалый ответ вряд ли будет полезен, но "для копилки" хочу привести ещё один генератор ПСП, до безобразия простой, легко настраиваемый на любую длину чисел и на любую длину неповторяющегося куска.
X_next = 5*(1 + X_prev) Вычисления производятся по модулю 2 в степени k (k - любое целое число от 3 до бесконечности). Этот генератор обладает ПОЛНЫМ периодом (то есть, цикл проходит через все k-битные числа, прежде чем возникнет повтор). А главное - простота реализации на любом МК. Это проще, чем вычислять регистр с линейной обратной связью, особенно если в МК есть умножение.
Примеры: Чтобы получить посл-сть 9-битных чисел с периодом 512, применяем вышенаписанную формулу при k=9 Чтобы получить посл-сть 9-битных чисел с периодом 2^24, то применяем вышенаписанную формулу при k=24 и берём СТАРШИЕ 9 бит от получающихся чисел.
Если кто-то усмотрит в этом генераторе некую автокорреляцию, ухудшающую свойства случайности, то есть такой выход (при наличии в МК быстрого умножения) X_next = A * X_prev + B где коэффициенты A и B - любые целые числа, такие что A даёт остаток 1 при делении на 4, а B - любое нечётное. Эти требования на A и B гарантируют полноту периода, то есть, все k-битные числа будут собраны в один цикл (при любом k). Автокорреляция, имхо, может быть улучшена, если взять большие числа A и B (вариант A=B=5 в этом плане хуже, но зато он предпочтительнее для тех, кому придётся умножать сдвигами и сложениями)
Конечно, для криптографических целей этот генератор не подходит.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|