Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Генератор псевдослучайных чисел, Сдвиговый регистр с обратной связью 
:(
    Опции темы
Первокурсница
Дата 27.4.2008, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 26.4.2008
Где: Оренбург

Репутация: нет
Всего: нет



 smile Как сгенерировать случайное число с помощью сдвигового регистра? Суть в чем? Короче, у меня трудности с представлением о машинном представлении числа (любого!) smile.
PM MAIL   Вверх
archimed7592
Дата 28.4.2008, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 6
Всего: 93



Цитата(Первокурсница @  27.4.2008,  11:03 Найти цитируемый пост)
Как сгенерировать случайное число с помощью сдвигового регистра?

Что за регистр такой? В общем случае случайное число можно генерировать так:
Rn = a + c mod Rn-1 где a и c - любые целочисленные константы и, если я не ошибаюсь, Вы получите все числа из последовательности 0..(a+c) в случайном порядке.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
xvr
Дата 29.4.2008, 10:40 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(archimed7592 @ 28.4.2008,  11:56)
Цитата(Первокурсница @  27.4.2008,  11:03 Найти цитируемый пост)
Как сгенерировать случайное число с помощью сдвигового регистра?

Что за регистр такой? В общем случае случайное число можно генерировать так:
Rn = a + c mod Rn-1 где a и c - любые целочисленные константы и, если я не ошибаюсь, Вы получите все числа из последовательности 0..(a+c) в случайном порядке.

Похоже человеку нужен LFSR. Псевдослучайные числа с его помощью обычно получают в аппаратуре, в програмировании он обычно используется для подсчета CRC
Вот функция, возвращающая псевдослучайный БИТ.
Код

static const int POLYNOM = 0xEDB88320;
bool get_rnd_bit()
{
 static int seed = -1;
 bool rv=(seed&1)!=0;
 seed>>=1;
 if (rv) seed^=POLYNOM;
 return rv;
}

PM MAIL   Вверх
Первокурсница
Дата 30.4.2008, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 26.4.2008
Где: Оренбург

Репутация: нет
Всего: нет



Спасибочки за код! Я действительно имела ввиду LFSR! smile  Но есть еще вопросик! Как эту функцию заставить генерировать каждый раз новую последовательность битов? И можно пояснить 1-ую и 5-ую строчки кода, пожалуйста!
PM MAIL   Вверх
xvr
Дата 30.4.2008, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(Первокурсница @ 30.4.2008,  14:23)
Спасибочки за код! Я действительно имела ввиду LFSR! smile  Но есть еще вопросик! Как эту функцию заставить генерировать каждый раз новую последовательность битов? 

Вынести seed наружу и проинициализировать его случайным числом (например временем). seed не может быть нулем

Цитата

И можно пояснить 1-ую и 5-ую строчки кода, пожалуйста!

1: static const int POLYNOM = 0xEDB88320;
Полином для LFSR. Единичные биты соответствуют отводам в сдвиговом регистре, с которых берется обратная связь. В данной реализации используется разновидность LFSR в котором элементы 'исключающее или' вмонтированны в сам регистр.

5:  bool rv=(seed&1)!=0;
Проверяется младший бит сдвигового регистра на 1, результат проверки выводится в качестве результата и заводится на все элементы 'исключающее или' в сдвиговом регистре

Попробую нарисовать регистр:
Код

   +---+      +---+         +----+              +----+
 +>|   |-->---|   |--> ^ -->|    |-- ^ - ... -->|    |-------> out
 | +---+      +---+    |    +----+   |          +----+   |
 +---------------------+-------------+-------------------+

PM MAIL   Вверх
Первокурсница
Дата 30.4.2008, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 26.4.2008
Где: Оренбург

Репутация: нет
Всего: нет



Ясно, спасибо! А в 1-ой строчке вашего кода после присваивания стоит адрес чего-то, верно? А чего? И еще, может быть, за одно подскажите, как временем-то инициализировать? Какой функцией, какую библиотеку надо подключать?
PM MAIL   Вверх
xvr
Дата 4.5.2008, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(Первокурсница @ 30.4.2008,  18:17)
Ясно, спасибо! А в 1-ой строчке вашего кода после присваивания стоит адрес чего-то, верно? А чего? 

Это не адрес, это совершенный неприводимый полином над полем степени 2, выраженный в битовом виде (каждый бит числа соотвествует какой то степени двойки)
В данном случае это X^32+X^26+X^23+X^22+X^16+X^12+X^11+X^10+X^8+X^7+X^5+X^4+X^2+X^1+X^0 (X^32 подразумевается и лежит за границей integer'а)
Цитата

И еще, может быть, за одно подскажите, как временем-то инициализировать? Какой функцией, какую библиотеку надо подключать?
Функция time(NULL), файл time.h


Это сообщение отредактировал(а) xvr - 4.5.2008, 14:28
PM MAIL   Вверх
Первокурсница
Дата 5.5.2008, 04:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 26.4.2008
Где: Оренбург

Репутация: нет
Всего: нет



Цитата

Это не адрес, это совершенный неприводимый полином над полем степени 2, выраженный в битовом виде (каждый бит числа соотвествует какой то степени двойки)



А откуда вы его взяли? Как можно получить еще другой какой-нибудь? Существуют ли какие-нибудь для этого алгоритмы???? smile 
Поясните, пожалуйста, этот врпрос меня очень заинтересовал!!! 
Заранее спасибо!
PM MAIL   Вверх
xvr
Дата 5.5.2008, 07:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(Первокурсница @ 5.5.2008,  04:54)
Цитата

Это не адрес, это совершенный неприводимый полином над полем степени 2, выраженный в битовом виде (каждый бит числа соотвествует какой то степени двойки)



А откуда вы его взяли?

Взял из исходника CRC32:
Цитата

/**********************************************************************\
|* Demonstration program to compute the 32-bit CRC used as the frame  *|
|* check sequence in ADCCP (ANSI X3.66, also known as FIPS PUB 71     *|
|* and FED-STD-1003, the U.S. versions of CCITT's X.25 link-level     *|
|* protocol).  The 32-bit FCS was added via the Federal Register,     *|
|* 1 June 1982, p.23798.  I presume but don't know for certain that   *|
|* this polynomial is or will be included in CCITT V.41, which        *|
|* defines the 16-bit CRC (often called CRC-CCITT) polynomial.  FIPS  *|
|* PUB 78 says that the 32-bit FCS reduces otherwise undetected       *|
|* errors by a factor of 10^-5 over 16-bit FCS.                       *|
\**********************************************************************/

Цитата

Как можно получить еще другой какой-нибудь? 
Поискать в Интернете или вычислить
Цитата

Существуют ли какие-нибудь для этого алгоритмы????
Да, в Handbook of Applied Cryptography

Прикрепляю свою библиотеку, написанную по этой книжке (поддерживаются только полиномы степеней 61-64)



Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  poly.rar 1,81 Kb
PM MAIL   Вверх
Первокурсница
Дата 5.5.2008, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 26.4.2008
Где: Оренбург

Репутация: нет
Всего: нет



Спасибо! Посмотрела вашу библиотеку. С первого взгляда, конечно, ничего не понятно. smile Но постараюсь разобраться!

Цитата

Цитата

Существуют ли какие-нибудь для этого алгоритмы????


Да, в Handbook of Applied Cryptography


Ну, английский у меня хромает (причем очень сильно и на обе ноги), а русской версии не нашла. Поэтому хочу спросить, вы не слышали про критерий Эйзенштейна? Он характеризует признаки неприводимого полинома, если не ошибаюсь. Если слышали, не могли бы пояснить доступней??? 
Заранее спасибо!
PM MAIL   Вверх
bsa
Дата 5.5.2008, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(Первокурсница @ 5.5.2008,  12:22)
Поэтому хочу спросить, вы не слышали про критерий Эйзенштейна? Он характеризует признаки неприводимого полинома, если не ошибаюсь. Если слышали, не могли бы пояснить доступней???

Он знает все.  smile 
PM   Вверх
xvr
Дата 5.5.2008, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(Первокурсница @ 5.5.2008,  12:22)
Спасибо! Посмотрела вашу библиотеку. С первого взгляда, конечно, ничего не понятно. smile Но постараюсь разобраться!

Цитата

Цитата

Существуют ли какие-нибудь для этого алгоритмы????


Да, в Handbook of Applied Cryptography


Ну, английский у меня хромает (причем очень сильно и на обе ноги), а русской версии не нашла. Поэтому хочу спросить, вы не слышали про критерий Эйзенштейна? 

Английский надо лечить  smile Про критерий Эйзенштейна не слышал, а критерий из вышеупомянутой книги - вот
Цитата

6.12 Fact (periods of LFSR output sequences) Let C(D) 2 Z2[D] be a connection polynomial
of degree L.
(i) If C(D) is irreducible over Z2 (see Definition 2.190), then each of the 2L − 1 nonzero
initial states of the non-singular LFSR hL;C(D)i produces an output sequence
with period equal to the least positive integer N such that C(D) divides 1 + DN in
Z2[D]. (Note: it is always the case that this N is a divisor of 2L − 1.)
(ii) If C(D) is a primitive polynomial (see Definition 2.228), then each of the 2L−1 nonzero
initial states of the non-singular LFSR hL;C(D)i produces an output sequence
with maximum possible period 2L − 1.
A method for generating primitive polynomials over Z2 uniformly at random is given
in Algorithm 4.78. Table 4.8 lists a primitive polynomial of degreem over Z2 for each m,
1 <= m <= 229.

Цитата

2.190 Definition Let f(x) 2 F[x] be a polynomial of degree at least 1. Then f(x) is said to be
irreducible over F if it cannot be written as the product of two polynomials in F[x], each
of positive degree

Цитата

2.228 Definition An irreducible polynomial f(x) 2 Zp[x] of degree m is called a primitive
polynomial if x is a generator of F
pm, the multiplicative group of all the non-zero elements
in Fpm = Zp[x]=(f(x))


PM MAIL   Вверх
Первокурсница
Дата 5.5.2008, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 26.4.2008
Где: Оренбург

Репутация: нет
Всего: нет



 smile 
ООООХХХХ! Этот English!!!!
Пошла за словарем. Переведу - еще чё-нить спрошу!
PM MAIL   Вверх
Vandalko
  Дата 22.9.2008, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 7.5.2007

Репутация: нет
Всего: нет



Я смотрю вы рассматриваете разнесённый тип генереатора... Мне как раз оч. нужен пример для полинома x^10+x^3+1  smile 
Вот только в С++, я не просто новачок, а очень сильно новачок smile ... поэтому был бы ОЧЕНЬ признателен за пример на Java  smile 

P.S. В конце должен получиться табличиный генератор псевдослучайных чисел, но как реализовать схему я без понятия...

меня больше всего смущают строчки:
 seed>>=1;
 if (rv) seed^=POLYNOM;

Это сообщение отредактировал(а) Vandalko - 22.9.2008, 21:03
PM MAIL WWW ICQ   Вверх
bsa
Дата 22.9.2008, 21:38 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(Vandalko @ 22.9.2008,  21:02)
меня больше всего смущают строчки:
 seed>>=1;
 if (rv) seed^=POLYNOM;

Код
seed = seed / 2;
if (rv)
   seed = seed ^ POLYNOM; // ^ - это побитовая операция XOR (исключающее ИЛИ)

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0565 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.