реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Генератор псевдослучайных чисел (ГПСЧ), Получение ПСЧ по seed-у и индексу внутри последовательности
fsergey
сообщение Jan 28 2014, 06:47
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 40
Регистрация: 19-07-12
Пользователь №: 72 832



Проще говоря нужна функция rand_value(int seed, int index).
Все ГПСЧ, что я видел, при генерации нового значения используют в качестве зерна предыдущее, либо модифицируют собственные задающие значения.
Поэтому получение n+1 числа в последовательности невозможно без расчёта предыдущих n чисел.
Мне же нужно получить произвольное число в последовательности без расчёта предыдущих.
Есть ли такие генераторы? Если нет, то что можно придумать?
Go to the top of the page
 
+Quote Post
Rst7
сообщение Jan 28 2014, 07:10
Сообщение #2


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



QUOTE
Есть ли такие генераторы? Если нет, то что можно придумать?


Не видал, но есть простой метод решения. Берете какой-нибудь алгоритм шифрования (например DES), и шифруете ключем seed открытый текст index. На выходе получаете случайные числа. Либо берете хэш-функцию (например, MD5) от композиции seed и index.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
fsergey
сообщение Jan 28 2014, 07:30
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 40
Регистрация: 19-07-12
Пользователь №: 72 832



Цитата(Rst7 @ Jan 28 2014, 10:10) *
Не видал, но есть простой метод решения. Берете какой-нибудь алгоритм шифрования (например DES), и шифруете ключем seed открытый текст index. На выходе получаете случайные числа. Либо берете хэш-функцию (например, MD5) от композиции seed и index.


Отличный вариант! Если не найду нужный ГПСЧ, то так и сделаю. Спасибо! ))
Go to the top of the page
 
+Quote Post
Guest_TSerg_*
сообщение Jan 28 2014, 07:41
Сообщение #4





Guests






Что мешает заполнить таблицу нужного размера от ГСЧ, а затем по индексу извлекать? sm.gif
Go to the top of the page
 
+Quote Post
fsergey
сообщение Jan 28 2014, 09:39
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 40
Регистрация: 19-07-12
Пользователь №: 72 832



Цитата(TSerg @ Jan 28 2014, 10:41) *
Что мешает заполнить таблицу нужного размера от ГСЧ, а затем по индексу извлекать? sm.gif

Даже если всю память контроллера займу таблицей, периодичность повторения ПСП будет для меня очень маленькой (
Go to the top of the page
 
+Quote Post
Guest_TSerg_*
сообщение Jan 28 2014, 09:50
Сообщение #6





Guests






Ну, хорошо. А открытый текст где держать? На большом брате и передавать по Wi-Fi? sm.gif
Вы задачу поточнее изложите, а то фантазий много возникает.
Go to the top of the page
 
+Quote Post
Fat Robot
сообщение Jan 28 2014, 10:01
Сообщение #7


ʕʘ̅͜ʘ̅ʔ
*****

Группа: Свой
Сообщений: 1 008
Регистрация: 3-05-05
Пользователь №: 4 691



Выдумывайте функцию rng = f(seed, index) и проверяйте с помощью diehard test battery последовательность получившихся значений rng для index, который инкрементируется.

В основу f( a, b ) удобно положить, как уже написал Rst7, какой-нибудь готовый шифратор или кодер от простой комбинации битов seed и index.
Go to the top of the page
 
+Quote Post
fsergey
сообщение Jan 28 2014, 11:34
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 40
Регистрация: 19-07-12
Пользователь №: 72 832



Цитата(TSerg @ Jan 28 2014, 12:50) *
Ну, хорошо. А открытый текст где держать? На большом брате и передавать по Wi-Fi? sm.gif
Вы задачу поточнее изложите, а то фантазий много возникает.

Время (индекс значения в последовательности) и ключ/полином, по условиям задачи, синхронизируются один раз в "безопасной среде".
Одинаковые значения должны синхронно формироваться на обоих устройствах для поддержания связи между собой.
Задача получения n-го значения последовательности выплывает из-за необходимости периодического восстановления синхронизма.
Это если вкратце.
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Jan 28 2014, 12:37
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Аналоговый генератор шума + АЦП. Хотя дополнительное железо мне не нравится, но для полноты картины...
Go to the top of the page
 
+Quote Post
Guest_TSerg_*
сообщение Jan 28 2014, 14:05
Сообщение #10





Guests






Цитата(Tarbal @ Jan 28 2014, 16:37) *
Аналоговый генератор шума + АЦП. Хотя дополнительное железо мне не нравится, но для полноты картины...


В этом случае никакой синхронизации не будет в принципе, а она ТС нужна.

P.S.
Если возникает рассинхронизация, то использовать передачу slave-девайсу нового значения seed и начинать синхронную генерацию ПСП (reset с новым seed).
Go to the top of the page
 
+Quote Post
fsergey
сообщение Jan 28 2014, 17:35
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 40
Регистрация: 19-07-12
Пользователь №: 72 832



Вопрос, может уже не в эту тему...
Последовал совету вычислять md5 от комбинации времени и индекса.
Время вычисления md5 на целевом камне - 15.17 мкс.
Зато алгоритм хэша "MurmurHash2" - 0.59 мкс.
Предел 1 мкс.
Кто-нибудь слышал про MurmurHash2? И есть ли альтернативная и быстрая хэш функция?
Go to the top of the page
 
+Quote Post
Fat Robot
сообщение Jan 28 2014, 18:24
Сообщение #12


ʕʘ̅͜ʘ̅ʔ
*****

Группа: Свой
Сообщений: 1 008
Регистрация: 3-05-05
Пользователь №: 4 691



Альтернативная обязательно есть: любая функция с выходом фиксированной разрядности, зависящим от входа.

А мурмур-то почему не подходит?

xxhash посмотрите, но не думаю, что там кардинальные отличия по части быстродействия

Цитата(fsergey @ Jan 28 2014, 18:35) *
И есть ли альтернативная и быстрая хэш функция?
Go to the top of the page
 
+Quote Post
fsergey
сообщение Jan 28 2014, 18:54
Сообщение #13


Участник
*

Группа: Участник
Сообщений: 40
Регистрация: 19-07-12
Пользователь №: 72 832



Цитата(Fat Robot @ Jan 28 2014, 22:24) *
Альтернативная обязательно есть: любая функция с выходом фиксированной разрядности, зависящим от входа.

А мурмур-то почему не подходит?

xxhash посмотрите, но не думаю, что там кардинальные отличия по части быстродействия


мурмур как раз подходит! Тест на равномерность распределения, применительно к задаче, дал отличный результат.
За совет спасибо, xxhash тоже думаю потестировать.
Go to the top of the page
 
+Quote Post
Fat Robot
сообщение Jan 28 2014, 19:15
Сообщение #14


ʕʘ̅͜ʘ̅ʔ
*****

Группа: Свой
Сообщений: 1 008
Регистрация: 3-05-05
Пользователь №: 4 691



Тест на равномерность распределения не стоит и ломаного сентаво.

пример: rng = 0,1,2,3, 0,1,2,3, 0,1,2,3, ... имеет равномерное распределение в диапазоне [0; 3]

Я писал вам, чем проверяются RNG.

С другой стороны, если у вас все хорошо, то пусть так и будет. равномерно хорошо.
Go to the top of the page
 
+Quote Post
fsergey
сообщение Jan 28 2014, 20:04
Сообщение #15


Участник
*

Группа: Участник
Сообщений: 40
Регистрация: 19-07-12
Пользователь №: 72 832



Цитата(Fat Robot @ Jan 28 2014, 23:15) *
Тест на равномерность распределения не стоит и ломаного сентаво.

пример: rng = 0,1,2,3, 0,1,2,3, 0,1,2,3, ... имеет равномерное распределение в диапазоне [0; 3]

Я писал вам, чем проверяются RNG.

С другой стороны, если у вас все хорошо, то пусть так и будет. равномерно хорошо.

Тест последовательностей по дайхарду (Runs Test):
49.76 - 49.82-% восходящих последовательностей для разных сидов. Покатит.
Тест Birthday Spacings ещё кажется интересным.
Идею понял. Благодарю!
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Jan 29 2014, 15:09
Сообщение #16


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Цитата(TSerg @ Jan 28 2014, 17:05) *
В этом случае никакой синхронизации не будет в принципе, а она ТС нужна.

P.S.
Если возникает рассинхронизация, то использовать передачу slave-девайсу нового значения seed и начинать синхронную генерацию ПСП (reset с новым seed).



Да, увлекся.
Ну тогда М-последовательность самое то, что надо. И предопределенная и абсолютно неавтокоррелируемая.
Go to the top of the page
 
+Quote Post
fsergey
сообщение Jan 30 2014, 04:44
Сообщение #17


Участник
*

Группа: Участник
Сообщений: 40
Регистрация: 19-07-12
Пользователь №: 72 832



Цитата(Tarbal @ Jan 29 2014, 18:09) *
Да, увлекся.
Ну тогда М-последовательность самое то, что надо. И предопределенная и абсолютно неавтокоррелируемая.

Обращал внимание на М-последовательность, но она не позволяет вычислить n+1 элемент без вычисления n предыдущих. Поэтому отказался.
Go to the top of the page
 
+Quote Post
Guest_TSerg_*
сообщение Jan 30 2014, 11:49
Сообщение #18





Guests






Позволяет, если в качестве исходного состояния взять n-е, тогда на след шаге получим n+1.
Go to the top of the page
 
+Quote Post
Task Solver
сообщение Jan 30 2014, 18:47
Сообщение #19





Группа: Участник
Сообщений: 14
Регистрация: 17-01-14
Пользователь №: 80 083



Рассмотрим группу по умножению по модулю 2^32 она изоморфна декартову произведению двух групп по сложению по модулям 2^30 и 2. В исходной группе ровно 2^31 элемент, все нечётные. Видно, что самый длинный цикл в ней равен 2^30, такой элемент не сложно найти перебором, их там очень много, пусть такое число - A.

Далее случайное число формируется по формуле: (A^k)*B.

B - это какой то любой элемент группы (нечёное число), имеют смысл только 1 и 3, остальные получаются сдвигом степени.

Его легко посчитать используя разложение степени на сумму степеней двойки, просто анализируя двоичное представление.

k=53=(110101)

A^53=A*A^52=A*(A*A)^26=A*((A*A)^2)^13=...

Сепени равные 0, 1, 2, 4, 8, 16, 32, ... 2^29 можно заранее посчитать и записать в таблицу. Потом согласно битам k перемножить.

В качестве случайного числа взять 30 старших битов (или их подстроку), потому что младший бит всегда 1, а не самый младший тоже вроде постоянен.

Сообщение отредактировал Task Solver - Jan 30 2014, 19:04
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 2nd August 2025 - 23:59
Рейтинг@Mail.ru


Страница сгенерированна за 0.01497 секунд с 7
ELECTRONIX ©2004-2016