Квадратичные конгруэнтные генераторы
Заказать уникальную курсовую работу- 25 25 страниц
- 36 + 36 источников
- Добавлена 14.02.2022
- Содержание
- Часть работы
- Список литературы
- Вопросы/Ответы
1.Введение………………………………………..3.
2.Глава 1.Рандомизация и квадратичные конгруэтные генераторы в программировании……………………………….5.
2.1.Принципы рандомизации…………………….5.
2.2.Виды рандомизации………………………….10.
3.Глава 2.Алгоритмы и построения конгруэтных генераторов в программировании……………………………….16.
3.1.Математическая модель и методы построения………………………………………...16
3.2.Алгоритм программы………………………....24
4.Заключение……………………………………....27
5.Список литературы……………………………...28
6.Приложение……………………………………...29
Линейный конгруэнтный генератор (LCG)Давайте рассмотрим другие алгоритмы. Деррик Генри в 1949 году создал линейный конгруэнтный генератор, который подбирает некие коэффициенты и с их помощью выполняет возведения в степень со сдвигом. constlong randMax = 4294967296;state = 214013 * state + 2531011;state ^= state >> 15;return (uint) (state % randMax);При генерировании с одним зерном паттерн нигде не образуется. Но при использовании i-тых элементов в последовательностях с различными зёрнами паттерн начинает прослеживаться. Причём его вид будет зависеть исключительно от коэффициентов, которые мы подобрали для генератора. Например, есть частный случай линейного конгруэнтного генератора — Randu. constlong randMax = 2147483648;state = 65539 * state + 0;return (uint) (state % randMax);Этот генератор страшен тем, что умножает одно большое число на другое и берёт остаток от деления на 231. XorShiftДавайте теперь посмотрим на более свежую разработку — XorShift. Этот алгоритм просто выполняет операцию Xor и сдвигает байт в несколько раз. У него тоже будет прослеживаться паттерн для i-тых элементов последовательностей.state ^= state << 13;state ^= state >> 17;state ^= state << 5;return state;Алгоритм программы.Создадим базовый класс abstractclassGen{publicabstractint gen();}И реализуем 3 унаследованных класса от него:// Квадратичный генераторclassKvGen : Gen{publicint a, b, c, m;publicint x0, x1, x2;publicoverrideint gen()// ЛинейныйгенераторclassLinGen : Gen{publicint a, b, m;publicint x0, x1;publicoverrideint gen()// СмешивательclassMixGen : Gen{publicGen x, y, z;Первые 2 класса реализуют конгруэнтные генераторы, а последний – смешивающий класс.При начале работы в генераторы вписываются параметры, а затем их них собирается итоговое число.Шифрация происходит следующим образом:string crypt( string s, int dir ){string r = "";for (int i = 0; i < s.Length; i++){if ((s[i] < 'а') | ('я' < s[i])){r += s[i];continue;}int p = (int)s[i] - (int)'а';p = (p + mix.gen() * dir + 10 * 32) % 32;r += (char)((int)'а' + p);}return r;}Для каждой буквы из алфавита прибавляем значение итогового генератора (по модулю). Для расшифровки производится обратная операция – вычитание.Демонстрация работы.Заключение.Зная вероятностные свойства истинно случайной последовательности, можно на их основе проверять гипотезу о том, на сколько сгенерированная последовательность похожа на случайную. Для этого для каждого теста подбирается подходящая статистика, вычисляется её значения для идеальной и сгенерированной последовательности. Если разность этих значений превышает некоторое критическое значение, установленное заранее, то последовательность считается неслучайной. Для „хороших“ последовательностей вероятность такого события крайне мала(допустим ~0,001 и обозначим её α). Однако, существует вероятность того, что „плохая“ последовательность удовлетворит критерию и будет сделан вывод о ее случайности(обозначим вероятность такого события β). На практике значения длины последовательности n, α и β связаны, задается α и подбирается n такое, чтобы минимизировать β.Список литературы.1. Jesse Liberty Visual C# 2005 – A Developer?s Notebook; Машиностроение - Москва, 2005. - 239 c.2. Абрамян М.Э. Visual C# на примерах (+ CD-ROM); БХВ-Петербург - М., 2008. - 685 c.3. Абрамян Михаил Visual C# на примерах; БХВ-Петербург - М., 2008. - 317 c.4. Агуров Павел C#. Разработка компонентов в MS Visual Studio 2005/2008; БХВ-Петербург - М., 2008. - 518 c.5. Агуров Павел C#. Сборник рецептов (+CD-ROM); БХВ-Петербург - М., 2007. - 432 c.6. Агуров Павел C#. Сборник рецептов; БХВ-Петербург - М., 2007. - 693 c.7. Албахари Джозеф , Албахари Бен C# 3.0. Справочник; БХВ-Петербург - М., 2009. - 944 c.8. Албахари Джозеф , Албахари Бен C# 6.0. Карманный справочник; Вильямс - М., 2015. - 318 c.9. Албахари Джозеф , Албахари Бен C# 6.0. Справочник. Полное описание языка; Вильямс - М., 2016. - 623 c.10. Альфред В. Ахо, Моника С. Лам, Сети Рави , Джеффри Д. Ульман Компиляторы. Принципы, технологии и инструментарий; Вильямс - М., 2015. - 503 c.11. Арсеновски Даниэль Рефакторинг в C# и ASP.NET для профессионалов; Вильямс - М., 2010. - 528 c.12. Биллиг В. А. Основы программирования на С#; Интернет-университет информационных технологий, Бином. Лаборатория знаний - М., 2012. - 488 c.13. Бишоп Дж. С# в кратком изложении; Бином. Лаборатория знаний - М., 2015. - 234 c.14. Бишоп Дж., Хорспул Н. C# в кратком изложении; Бином. Лаборатория знаний - М., 2005. - 472 c.15. Блюстайн Майкл Изучаем MonoTouch. Создание приложений на платформе iOS с помощью C# и .NET; ДМК Пресс - М., 2012. - 336 c.16. Васильев Алексей C#. Объектно-ориентированное программирование; Питер - М., 2012. - 320 c.17. Ватсон Б. С# 4.0 на примерах (C# 4.0. How-To); БХВ-Петербург - М., 2011. - 608 c.18. Ватсон Бен С# 4.0 на примерах; БХВ-Петербург - М., 2010. - 139 c.19. Голдштейн Саша , Зурбалев Дима , Флатов Идо Оптимизация приложений на платформе .Net; ДМК Пресс - М., 2014. - 524 c.20. Гриффитс Иэн Программирование на C# 5.0; Эксмо - М., 2014. - 580 c.21. Гросс Кристиан C# 2008 и платформа .NET 3.5 Framework; Вильямс - М., 2009. - 480 c.22. Гуриков С. Р. Введение в программирование на языке Visual C#; ИЛ - Москва, 2013. - 448 c.23. Гэри Маклин Холл Адаптивный код на C#. Проектирование классов и интерфейсов, шаблоны и принципы SOLID; Вильямс - М., 2015. - 432 c.24. Дейтел П. Как программировать на Visual C# 2012; Питер - М., 2014. - 316 c.25. Джозеф Албахари C# 5.0. Карманный справочник; Диалектика / Вильямс - М., 2013. - 303 c.26. Джозеф Албахари C# 5.0. Справочник. Полное описание языка; Диалектика / Вильямс - М., 2014. - 545 c.27. Дэвис Алекс Асинхронное программирование в C# 5.0; ДМК Пресс - М., 2015. - 120 c.28. Евдокимов П. С# на примерах; ИЛ - Москва, 2016. - 865 c.29. Жарков В. А. Visual C# 2005 в учебе, науке и технике (+ CD-ROM); Жарков Пресс - М., 2006. - 818 c.30. Зиборов В. Visual C# 2012 на примерах; БХВ-Петербург - М., 2015. - 966 c.31. Зиборов Виктор Visual C# 2010 на примерах; БХВ-Петербург - М., 2011. - 598 c.32. Ишкова Э. А. Самоучитель С#. Начала программирования; Наука и техника - М., 2013. - 496 c.33. Касаткин А. И. Профессиональное программирование на языке си. Управление ресурсами; Высшая школа - М., 1992. - 432 c.34. Климов А. C#. Советы программистам; БХВ-Петербург - М., 2008. - 544 c.35. Колесников А. П. Методы численного анализа, изложенные на языке формул и алгоритмическом языке C#; Высшая школа - Москва, 2017. - 414 c.36. Кристиан Нейгел Visual C# 2010. Полный курс; Диалектика / Вильямс - М., 2011. - 575 c.Приложение.Form1.cs:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace crypto{publicpartialclassForm1 : Form{publicForm1(){InitializeComponent();}MixGen mix = new MixGen();KvGen genx = new KvGen();KvGen geny = new KvGen();LinGen genz = new LinGen();// Чтение параметров и инициализация генераторовvoid read(){genx.a = Convert.ToInt32(textBox1.Text);genx.b = Convert.ToInt32(textBox2.Text);genx.c = Convert.ToInt32(textBox3.Text);genx.x1 = Convert.ToInt32(textBox4.Text);genx.x2 = Convert.ToInt32(textBox5.Text);genx.m = Convert.ToInt32(textBox11.Text);geny.a = Convert.ToInt32(textBox10.Text);geny.b = Convert.ToInt32(textBox9.Text);geny.c = Convert.ToInt32(textBox8.Text);geny.x1 = Convert.ToInt32(textBox7.Text);geny.x2 = Convert.ToInt32(textBox6.Text);geny.m = Convert.ToInt32(textBox13.Text);genz.a = Convert.ToInt32(textBox15.Text);genz.b = Convert.ToInt32(textBox14.Text);genz.x1 = Convert.ToInt32(textBox12.Text);genz.m = Convert.ToInt32(textBox19.Text);}privatevoid Form1_Load(object sender, EventArgs e){// Сбор всех генераторов в единыйmix.x = genx;mix.y = geny;mix.z = genz;}string crypt( string s, int dir ){string r = "";for (int i = 0; i < s.Length; i++){if ((s[i] < 'а') | ('я' < s[i])){r += s[i];continue;}int p = (int)s[i] - (int)'а';p = (p + mix.gen() * dir + 10 * 32) % 32;r += (char)((int)'а' + p);}return r;}privatevoid button1_Click(object sender, EventArgs e){read();textBox17.Text = crypt(textBox16.Text, 1);}privatevoid button2_Click(object sender, EventArgs e){read();textBox18.Text = crypt(textBox17.Text, -1);}}// Абстрактный класс генератораabstractclassGen{publicabstractint gen();}// Квадратичный генераторclassKvGen : Gen{publicint a, b, c, m;publicint x0, x1, x2;publicoverrideint gen(){x0 = x1;x1 = x2;x2 = (a * x0 ^ 2 + b * x1 + c) % m;return x2;}}// Линейный генераторclassLinGen : Gen{publicint a, b, m;publicint x0, x1;publicoverrideint gen(){x0 = x1;x1 = (a * x1 + b) % m;return x1;}}// СмешивательclassMixGen : Gen{public Gen x, y, z;publicoverrideint gen(){return 1 + y.gen() + x.gen() * z.gen();}}}Program.cs:using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using System.Windows.Forms;namespace crypto{staticclassProgram{///
1. Jesse Liberty Visual C# 2005 – A Developer?s Notebook; Машиностроение - Москва, 2005. - 239 c.
2. Абрамян М.Э. Visual C# на примерах (+ CD-ROM); БХВ-Петербург - М., 2008. - 685 c.
3. Абрамян Михаил Visual C# на примерах; БХВ-Петербург - М., 2008. - 317 c.
4. Агуров Павел C#. Разработка компонентов в MS Visual Studio 2005/2008; БХВ-Петербург - М., 2008. - 518 c.
5. Агуров Павел C#. Сборник рецептов (+CD-ROM); БХВ-Петербург - М., 2007. - 432 c.
6. Агуров Павел C#. Сборник рецептов; БХВ-Петербург - М., 2007. - 693 c.
7. Албахари Джозеф , Албахари Бен C# 3.0. Справочник; БХВ-Петербург - М., 2009. - 944 c.
8. Албахари Джозеф , Албахари Бен C# 6.0. Карманный справочник; Вильямс - М., 2015. - 318 c.
9. Албахари Джозеф , Албахари Бен C# 6.0. Справочник. Полное описание языка; Вильямс - М., 2016. - 623 c.
10. Альфред В. Ахо, Моника С. Лам, Сети Рави , Джеффри Д. Ульман Компиляторы. Принципы, технологии и инструментарий; Вильямс - М., 2015. - 503 c.
11. Арсеновски Даниэль Рефакторинг в C# и ASP.NET для профессионалов; Вильямс - М., 2010. - 528 c.
12. Биллиг В. А. Основы программирования на С#; Интернет-университет информационных технологий, Бином. Лаборатория знаний - М., 2012. - 488 c.
13. Бишоп Дж. С# в кратком изложении; Бином. Лаборатория знаний - М., 2015. - 234 c.
14. Бишоп Дж., Хорспул Н. C# в кратком изложении; Бином. Лаборатория знаний - М., 2005. - 472 c.
15. Блюстайн Майкл Изучаем MonoTouch. Создание приложений на платформе iOS с помощью C# и .NET; ДМК Пресс - М., 2012. - 336 c.
16. Васильев Алексей C#. Объектно-ориентированное программирование; Питер - М., 2012. - 320 c.
17. Ватсон Б. С# 4.0 на примерах (C# 4.0. How-To); БХВ-Петербург - М., 2011. - 608 c.
18. Ватсон Бен С# 4.0 на примерах; БХВ-Петербург - М., 2010. - 139 c.
19. Голдштейн Саша , Зурбалев Дима , Флатов Идо Оптимизация приложений на платформе .Net; ДМК Пресс - М., 2014. - 524 c.
20. Гриффитс Иэн Программирование на C# 5.0; Эксмо - М., 2014. - 580 c.
21. Гросс Кристиан C# 2008 и платформа .NET 3.5 Framework; Вильямс - М., 2009. - 480 c.
22. Гуриков С. Р. Введение в программирование на языке Visual C#; ИЛ - Москва, 2013. - 448 c.
23. Гэри Маклин Холл Адаптивный код на C#. Проектирование классов и интерфейсов, шаблоны и принципы SOLID; Вильямс - М., 2015. - 432 c.
24. Дейтел П. Как программировать на Visual C# 2012; Питер - М., 2014. - 316 c.
25. Джозеф Албахари C# 5.0. Карманный справочник; Диалектика / Вильямс - М., 2013. - 303 c.
26. Джозеф Албахари C# 5.0. Справочник. Полное описание языка; Диалектика / Вильямс - М., 2014. - 545 c.
27. Дэвис Алекс Асинхронное программирование в C# 5.0; ДМК Пресс - М., 2015. - 120 c.
28. Евдокимов П. С# на примерах; ИЛ - Москва, 2016. - 865 c.
29. Жарков В. А. Visual C# 2005 в учебе, науке и технике (+ CD-ROM); Жарков Пресс - М., 2006. - 818 c.
30. Зиборов В. Visual C# 2012 на примерах; БХВ-Петербург - М., 2015. - 966 c.
31. Зиборов Виктор Visual C# 2010 на примерах; БХВ-Петербург - М., 2011. - 598 c.
32. Ишкова Э. А. Самоучитель С#. Начала программирования; Наука и техника - М., 2013. - 496 c.
33. Касаткин А. И. Профессиональное программирование на языке си. Управление ресурсами; Высшая школа - М., 1992. - 432 c.
34. Климов А. C#. Советы программистам; БХВ-Петербург - М., 2008. - 544 c.
35. Колесников А. П. Методы численного анализа, изложенные на языке формул и алгоритмическом языке C#; Высшая школа - Москва, 2017. - 414 c.
36. Кристиан Нейгел Visual C# 2010. Полный курс; Диалектика / Вильямс - М., 2011. - 575 c.
Вопрос-ответ:
Какие принципы рандомизации используются в программировании?
Принципы рандомизации в программировании включают в себя использование случайных чисел для генерации различных результатов, добавление шума к данным или алгоритмам, а также перемешивание элементов в случайном порядке.
Какие виды рандомизации существуют?
В программировании существуют различные виды рандомизации, такие как генерация случайных чисел, использование шифрования для создания случайных результатов, перемешивание элементов в массиве, добавление шума к данным и алгоритмам.
Какая математическая модель используется при построении конгруэтных генераторов?
При построении конгруэтных генераторов в программировании используется математическая модель квадратичной функции, которая генерирует случайные числа на основе начального значения и некоторой формулы.
Какой алгоритм используется при программировании конгруэтных генераторов?
Алгоритм программы для конгруэтных генераторов включает в себя определение начального значения, применение квадратичной формулы для генерации следующего числа и сохранение его в памяти для дальнейшего использования.
Какие источники можно использовать для дополнительного изучения темы?
Для дополнительного изучения темы конгруэтных генераторов в программировании можно обратиться к следующим источникам литературы: [список литературы]
Что такое квадратичные конгруэнтные генераторы?
Квадратичные конгруэнтные генераторы (ККГ) - это специальный тип псевдослучайных генераторов, которые используются для генерации чисел в программировании. Они базируются на алгоритмах, где каждый новый элемент последовательности вычисляется на основе предыдущего элемента с помощью квадратичной функции и модулярной арифметики.
Какие принципы рандомизации применяются в программировании?
В программировании применяются разные принципы рандомизации: генерация случайных чисел на основе физических процессов (например, шума в электрической цепи), использование случайной информации (например, шумов из внешних источников), алгоритмическая генерация псевдослучайных чисел и комбинированные методы.
Какие алгоритмы используются для построения конгруэнтных генераторов в программировании?
Для построения конгруэнтных генераторов в программировании могут использоваться различные алгоритмы. Одним из наиболее распространенных методов является метод линейного конгруэнтного генератора. Он основан на итеративном вычислении последовательности чисел с помощью линейной функции и модулярной арифметики.
Какие методы используются при построении математической модели конгруэтного генератора?
При построении математической модели конгруэтного генератора используются различные методы, включая алгебру, теорию чисел и теорию вероятностей. Основной целью при построении модели является создание алгоритма, который будет обладать свойствами случайности и равномерности распределения элементов в генерируемой последовательности чисел.
Где можно найти дополнительную литературу по конгруэтным генераторам?
Дополнительную литературу по конгруэтным генераторам можно найти в различных источниках. Рекомендуется обратить внимание на учебники и научные статьи, посвященные теме генерации псевдослучайных чисел и математическому моделированию. Также полезными могут быть источники, связанные с алгоритмикой и программированием.
Какой принцип лежит в основе рандомизации?
Принцип рандомизации основан на использовании случайности для создания предсказуемо непредсказуемых данных или последовательностей чисел.
Какие виды рандомизации существуют?
Существует несколько видов рандомизации, включая физическую рандомизацию, программную рандомизацию и криптографическую рандомизацию.