Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
bambino
194 / 20 / 5
Регистрация: 05.08.2010
Сообщений: 229
#1

Генератор псевдослучайных чисел

22.09.2011, 21:47. Просмотров 1653. Ответов 10
Метки нет (Все метки)

Всем привет. Как такое "чудо" пишеться, примерный алгоритм, если можно на псевдокоде:

Написать генератор псевдослучайных чисел по алгоритму
f(n) = f(n-1) + f(n-2) + f(n-3) + f(n-4) ( f0 = f1 = f2 = f3 = 1)
r = fn mod 211. ( 0 - 210)
Подсчитать частоту каждого числа при выборке 100000

Спасибо.

Добавлено через 24 минуты
хоть на словах, как это выглядит
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.09.2011, 21:47
Ответы с готовыми решениями:

Генератор псевдослучайных чисел.
Написать генератор псевдослучайных чисел по алгоритму r = r * 4231 + 123457; ...

Генератор псевдослучайных чисел
Данный генератор работает по конгруэнтному методу, формула X_{n} = ( a...

Генератор псевдослучайных чисел
Написать генератор псевдослучайных чисел по алгоритму r = r * 4231 + 123457;...

генератор псевдослучайных чисел...
Вот програмулька генерирующая псевдослучайные числа создавалась по алгоритму...

Генератор псевдослучайных чисел
Народ, помогите плиз с решением этой задачи. Мне надо управляемый генератор...

10
Thinker
Эксперт С++
4232 / 2206 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
22.09.2011, 22:40 #2
Держите вашу рекуррентную последовательность:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<iostream>
 
int main()
{
   long f, f0, f1, f2, f3, i, n;
   n = 100;
   f0 = f1= f2= f3 = 1;
   for (i = 0; i < n; i++)
   {
      f = (f0 + f1 + f2 + f3) % 211;
      std::cout << f << " ";
      f0 = f1; f1 = f2; f2 = f3; f3 = f;
   }
   return 0;
}
1
bambino
194 / 20 / 5
Регистрация: 05.08.2010
Сообщений: 229
22.09.2011, 22:50  [ТС] #3
Thinker, Спасибо, а как вынести это в отдельную функцию ? Делаю так, что-то не то:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<iostream>
 
int get_rnd()
{
   int f, f0, f1, f2, f3;
   f0 = f1 = f2 = f3 = 1;
   f = (f0 + f1 + f2 + f3) % 211;
   f0 = f1; f1 = f2; f2 = f3; f3 = f;
   return f;
}
 
int main()
{
   int n = 10;
   for (int i = 0; i < n; i++)
      std::cout << get_rnd() << " ";
   return 0;
}
0
Thinker
Эксперт С++
4232 / 2206 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
22.09.2011, 22:52 #4
А вот с выводом частот:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include<iostream>
 
#define MOD 211
#define N 100000
 
int main()
{
 
   long f, f0, f1, f2, f3, i;
   long count[MOD] = {0};
   f0 = f1 = f2= f3 = 1;
   for (i = 0; i < N; i++)
   {
      f = (f0 + f1 + f2 + f3) % MOD;
      count[f]++;
      //std::cout << f << " ";
      f0 = f1; f1 = f2; f2 = f3; f3 = f;
   }
   for (i = 0; i < MOD; i++)
   {
      std::cout << i << " " << count[i] << "\n";
   }
   return 0;
}
1
Sylvos
-25 / 6 / 3
Регистрация: 06.04.2011
Сообщений: 85
22.09.2011, 22:58 #5
Цитата Сообщение от Thinker Посмотреть сообщение
А вот с выводом частот:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include<iostream>
 
#define MOD 211
#define N 100000
 
int main()
{
 
   long f, f0, f1, f2, f3, i;
   long count[MOD] = {0};
   f0 = f1 = f2= f3 = 1;
   for (i = 0; i < N; i++)
   {
      f = (f0 + f1 + f2 + f3) % MOD;
      count[f]++;
      //std::cout << f << " ";
      f0 = f1; f1 = f2; f2 = f3; f3 = f;
   }
   for (i = 0; i < MOD; i++)
   {
      std::cout << i << " " << count[i] << "\n";
   }
   return 0;
}
Очень страшный алгоритм, почему бы просто не использовать обычный rand() ?
0
Thinker
Эксперт С++
4232 / 2206 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
22.09.2011, 23:08 #6
Цитата Сообщение от bambino Посмотреть сообщение
Thinker, Спасибо, а как вынести это в отдельную функцию ? Делаю так, что-то не то.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#define MOD 211
#define N 100
 
int get_rnd()
{
   static int f = 1, f0 = 1, f1 = 1, f2 = 1, f3 = 1;
   f = (f0 + f1 + f2 + f3) % MOD;
   f0 = f1; f1 = f2; f2 = f3; f3 = f;
   return f;
}
 
int main()
{
 
   int i;
   for (i = 0; i < N; i++)
      printf("%d ", get_rnd());
   getchar();
   return 0;
}
Цитата Сообщение от Sylvos Посмотреть сообщение
Очень страшный алгоритм, почему бы просто не использовать обычный rand() ?
ТС не ищет легких путей)
1
alex_x_x
22.09.2011, 23:58
  #7

Не по теме:

Цитата Сообщение от Sylvos Посмотреть сообщение
Очень страшный алгоритм, почему бы просто не использовать обычный rand() ?
обычный rand сам по себе довольно слабый ГСЧ
могут быть специфические требования к последовательности

0
jonson
23.09.2011, 00:11
  #8

Не по теме:

Цитата Сообщение от alex_x_x Посмотреть сообщение
обычный rand сам по себе довольно слабый ГСЧ
могут быть специфические требования к последовательности
интересно, с чего такой вывод?

0
Sylvos
23.09.2011, 00:28
  #9

Не по теме:

jonson, Это скорей всего такой тонкий юморок людей с опытом которые тут провели уже довольно длительное время:D

0
alex_x_x
23.09.2011, 00:32
  #10

Не по теме:

оттого что он действительно слабый - маленький период повтора последовательности, отсутствие криптостойкости (по части последовательности можно восстановить всю последующую)
если не путаю там обычно простейший линейный конгруэнтный метод

2
Thinker
Эксперт С++
4232 / 2206 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
23.09.2011, 10:46 #11
Цитата Сообщение от alex_x_x Посмотреть сообщение

Не по теме:

оттого что он действительно слабый - маленький период повтора последовательности...

Не по теме:

Это правда. Не зря же существует целый комплекс алгоритмов, генерирующих псевдослучайные числа. Не даром же существует проблема генерации истинно случайных чисел, которую пытаются решить массой способов.

0
23.09.2011, 10:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.09.2011, 10:46

Генератор псевдослучайных чисел.
Здраствуйте. Мне нужно сделать вот что &quot;Написать генератор псевдослучайных...

Массивы,генератор псевдослучайных чисел.
Всем привет,помогите разобраться с 2 задачами. 1) Дана последовательность из n...

Генератор псевдослучайных чисел (иллюзия?)
Пусть есть какое-либо событие и оно может быть либо удачным, либо не удачным....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru