Значення випадкових чисел у програмуванні. Алгоритми генерації рівномірно розподілених псевдовипадкових чисел



Дата конвертації17.06.2016
Розмір445 b.



Перелік питань:

      • Перелік питань:
  • Значення випадкових чисел у програмуванні .

  • Алгоритми генерації рівномірно розподілених псевдовипадкових чисел .

  • Перевірка якості випадкових чисел .

  • Кодування з виправленням помилок .

  • Стиснення даних .

  • Алгоритм стиснення даних RLE .

  • Алгоритм стиснення даних Лемпела-Зіва .

  • Алгоритм стиснення даних Хафмана .



Випадкові числа – числа, значення яких не можна передбачити.

  • Випадкові числа – числа, значення яких не можна передбачити.

  • Випадкові числа використовуються у статистиці, економіці, математиці, азартних іграх, особливого поширення набули у криптографії

  • У економічній сфері випадкові числа активно використовуються для математичного моделювання економічних процесів – фінансових ринків, інструментів і т.д.

  • Випадкові числа розподілені за різними законами: біноміальним, нормальним, законом Пуассона і т.д.

  • За допомогою комп’ютерів генерація випадкових чисел здійснюється за спеціальними алгоритмами, які у своїй більшості, однак, не можуть гарантувати справжньої випадковості, тому їх називають генераторами псевдовипадкових чисел

  • Деякі генератори псевдовипадкових чисел сприймають певне початкове значення, далі на основі певного алгоритму за допомогою рекурертних співвідношень формують наступні числа. Знаючи алгоритм і його початкові значення можна передбачити числа, що є особливо небезпечно для алгоритмів криптографії.



Використання системних значень дати, часу, різноманітних таймерів, лічильника тактів процесора

  • Використання системних значень дати, часу, різноманітних таймерів, лічильника тактів процесора

  • Зчитування пристроїв введення інформації (клавіатури, миші)

  • Використання сенсорів температури, сигналів аудіоканалів, зображення веб-камер

  • Використання унікальних серійних номерів процесора, мережевої плати, іншого обладнання

  • Використання спеціальних пристроїв, наприклад, лічильників радіації Гейгера

  • Використання таблиць заздалегідь згенерованих чисел

  • Використання спеціалізованих сервісів, які надають можливість отримувати випадкові числа через Інтернет





using System;

  • using System;

  • using System.Collections.Generic;

  • using System.Linq;

  • using System.Text;

  • using System.Threading;

  •  

  • namespace RandomGenerator

  • {

  • class Program

  • {

  • static void Main(string[] args)

  • {

  • for (int i = 0; i < 10; i++)

  • {

  • int Rand = DateTime.Now.Millisecond % 100;

  • Console.WriteLine(Rand);

  • Thread.Sleep(100 + Rand * 10);

  • }

  • Console.ReadKey();

  • }

  • }

  • }

  •  





Для генерації рівномірно розподілених псевдовипадкових чисел можна застосовувати найпростіший алгоритм, оснований на наступному рекуррертному співвідношенні:

  • Для генерації рівномірно розподілених псевдовипадкових чисел можна застосовувати найпростіший алгоритм, оснований на наступному рекуррертному співвідношенні:

        • I(n+1)=(a*I(n)+c)(mod m)
    • де число a називається мультиплікатором;
    • число c – інкрементом;
    • число m - модулем


using System;

  • using System;

  • using System.Collections.Generic;

  • using System.Linq;

  • using System.Text;

  • using System.Threading;

  • namespace RandomGenerator

  • {

  • class Program

  • {

  • static int next = 1;

  • static int GetRand() {

  • next = next * 1103515245 + 12345;

  • return((int)(next/65536)%32768);

  • }

  • static void Main(string[] args)

  • {

  • for (int i = 0; i < 10; i++)

  • {

  • int Rand = Math.Abs(GetRand() % 100);

  • Console.WriteLine(Rand);

  • }

  • Console.ReadKey();

  • }

  • }

  • }



Якість випадкових чисел визначається їх відповідністю певному закону розподілу

  • Якість випадкових чисел визначається їх відповідністю певному закону розподілу

  • Для перевірки якості необхідно обрати статистичний крітерій (Пірсона, Ст’юдента та ін. ) і перевірити гіпотезу про відповідність розподілу

  • Крім того, для генератора псевдовипадкових випадкових чисел важливо запобігти взлому, тобто підбору такого алгоритму, який би дозволив зпрогнозувати значення наступних чисел за значеннями попередніх

  • Для перевірки якості можна застосовувати спеціальне програмне забезпечення, наприклад вільно доступний пакет Національного інституту стандартів і технології США : http://csrc.nist.gov/groups/ST/toolkit/rng/documentation_software.html



В процесі передавання каналами зв’язку чи зберігання на носіях даних інформація може бути пошкоджена

  • В процесі передавання каналами зв’язку чи зберігання на носіях даних інформація може бути пошкоджена

  • Для виявлення пошкодження інформації, а також її відновлення використовуються спеціальні методи кодування

  • Найпростіша схема кодування для виявлення помилок полягає у наступному:

    • сторона, що передає дані, використовує певний алгоритм для розрахунку контрольної суми даних, яка передається разом із самими даними;
    • сторона, що отримує дані, використовує той же самий алгоритм для розрахунку контрольної суми над отриманими даними і зіставляє розраховане значення із переданою контрольною сумою, якщо виявляється розбіжність, то це означає, що дані (чи контрольна сума) у процесі передачі пошкоджені і передачу необхідно повторити.


Найпростіший алгоритм такого кодування – “перевірка парності”: для кожного переданого байту підраховується сума одиничок, і у окремому біті заноситься “0” чи “1” в залежності від того, відповідно, чи є сума парною, чи ні. Таким чином, сума бітів у байті (разом із додатковим бітом) завжди є парною (чи непарною, якщо використовується перевірка непарності).

  • Найпростіший алгоритм такого кодування – “перевірка парності”: для кожного переданого байту підраховується сума одиничок, і у окремому біті заноситься “0” чи “1” в залежності від того, відповідно, чи є сума парною, чи ні. Таким чином, сума бітів у байті (разом із додатковим бітом) завжди є парною (чи непарною, якщо використовується перевірка непарності).





Алгоритм CRC (Cyclic Redundancy Check) є одним з найпоширеніших алгоритмів контролю цілісності даних.

  • Алгоритм CRC (Cyclic Redundancy Check) є одним з найпоширеніших алгоритмів контролю цілісності даних.

  • Ідея алгоритму полягає у наступному: будь-яка послідовність даних може бути представлена у вигляді послідовності двійкових бітів, поділивши цю послідовність на деяке фіксоване число можна отримати залишок від ділення, який і буде являти собою шукану контрольну суму.

  • Незначні зміни даних, як правило, приводять до суттєвих змін залишку, у такому разі алгоритм дозволяє дуже ефективно виявляти помилки у даних.

  • Для зручності розрахунку CRC операції проводяться над поліномами, за допомогою яких представляються числа.

  • Існують стандартизовані поліноми:



Процедура виправлення помилки передбачає два послідовних процеси: виявлення помилки та визначення місця, де вона відбулася.

  • Процедура виправлення помилки передбачає два послідовних процеси: виявлення помилки та визначення місця, де вона відбулася.

  • Код Хемінга – популярний код виправлення помилок, відноситься до блокових кодів, який дозволяє виявити та виправити помилково переданий біт в межах одного переданого блоку.

  • Звичайно цей код характеризується двома цілими числами, наприклад (11,7), які означають, що при передачі 7-бітного коду (у минулому стандартне для США ASCII-кодування) передається додатково 4 контрольних біти (11 – 7 = 4).



Приклад. Необхідно передати літеру s = 1110011.

  • Приклад. Необхідно передати літеру s = 1110011.

  • Передача буде здійснюватись наступним чином:

  • (*) – місце для контрольних бітів, ціла ступінь 2 (1,2,4,8)

  • Контрольна сума визначається як операція XOR над кодами позицій ненульових бітів. У даному разі це 11, 10, 9, 5 та 3.

  • Розрахунок:

  • Таким чином, передаватися буде наступний код:

  • У даному разі контрольна сума за операцією XOR для усіх ненульових бітів буде рівна нулю:



Тепер уявимо, що виникла помилка у біті посилки №7 (1 замість 0), розрахунок контрольної суми дасть наступний результат:

  • Тепер уявимо, що виникла помилка у біті посилки №7 (1 замість 0), розрахунок контрольної суми дасть наступний результат:

  • Отримана ненульова контрольна сума свідчить про наявність помилки, а її значення – позицію біта, який необхідно інвертувати:

    • 1112 = 710


Код може усувати помилку лише у одному біті, якщо відбувається декілька помилок, то використання коду для виправлення неможливе.

  • Код може усувати помилку лише у одному біті, якщо відбувається декілька помилок, то використання коду для виправлення неможливе.

  • Для збільшення діапазону виправлення помилок використовується більш складна загальна форма коду BCH (Bose-Chadhuri-hocquenghem).



Передбачає блочний розрахунок кодів парності у декількох вимірах.

  • Передбачає блочний розрахунок кодів парності у декількох вимірах.



Характерною особливістю більшості типів даних є їх надлишковість.

  • Характерною особливістю більшості типів даних є їх надлишковість.

  • Ступінь надлишковості даних залежить від типу даних. Наприклад, для відеоданих ступінь надлишковості в декілька разів більша ніж для графічних даних, а ступінь надлишковості графічних даних, у свою чергу, більша за ступінь надлишковості текстових даних.

  • Іншим фактором, що впливає на ступінь надлишковості є прийнята система кодування.

  • Прикладом систем кодування можуть бути звичайні мови спілкування, які є ні чим іншим, як системами кодування понять та ідей для висловлення думок. Так, встановлено, що кодування текстових даних за допомогою засобів української мови дає в середньому надлишковість на 20-25% більшу ніж кодування аналогічних даних засобами англійської мови.



Для людини надлишковість даних часто пов'язана з якістю інформації, оскільки надлишковість, як правило, покращує зрозумілість та сприйняття інформації.

  • Для людини надлишковість даних часто пов'язана з якістю інформації, оскільки надлишковість, як правило, покращує зрозумілість та сприйняття інформації.

  • Однак, коли мова йде про зберігання та передачу інформації засобами комп'ютерної техніки, то надлишковість відіграє негативну роль, оскільки вона приводить до зростання вартості зберігання та передачі інформації.

  • Особливо актуальною є ця проблема у випадку необхідності обробки величезних обсягів інформації при незначних об'ємах носіїв даних. У зв'язку з цим постійно виникає проблема позбавлення надлишковості або стиснення даних.

  • Коли методи стиснення даних застосовуються до готових файлів, то часто замість терміну "стиснення даних" вживають термін "архівування даних", стиснений варіант даних називають архівом, а програмні засоби, що реалізують методи стиснення називаються архіваторами.



Існує багато практичних алгоритмів стиснення даних, але всі вони базуються на трьох теоретичних способах зменшення надлишковості даних.

  • Існує багато практичних алгоритмів стиснення даних, але всі вони базуються на трьох теоретичних способах зменшення надлишковості даних.

  • Перший спосіб полягає в зміні вмісту даних, другий - у зміні структури даних, а третій - в одночасній зміні як структури, так і вмісту даних.

  • Якщо при стисненні даних відбувається зміна їх вмісту, то метод стиснення є незворотнім, тобто при відновленні (розархівуванні) даних з архіву не відбувається повне відновлення інформації. Такі методи часто називаються методами стиснення з регульованими втратами інформації. Зрозуміло, що ці методи можна застосовувати тільки для таких типів даних, для яких втрата частини вмісту не приводить до суттєвого спотворення інформації. До таких типів даних відносяться відео- та аудіодані, а також графічні дані. Методи стиснення з регульованими втратами інформації забезпечують значно більший ступінь стиснення, але їх не можна застосовувати до текстових даних. Прикладами форматів стиснення з втратами інформації можуть бути: JPEG (Joint Photographic Experts Group) для графічних даних; MPG - для для відеоданих; MP3 - для аудіоданих.



Якщо при стисненні даних відбувається тільки зміна структури даних, то метод стиснення є зворотнім. У цьому випадкові з архіву можна відновити інформацію повністю.

  • Якщо при стисненні даних відбувається тільки зміна структури даних, то метод стиснення є зворотнім. У цьому випадкові з архіву можна відновити інформацію повністю.

  • Зворотні методи стиснення можна застосовувати до будь-яких типів даних, але вони дають менший ступінь стиснення у порівнянні з незворотними методами стиснення.

  • Приклади форматів стиснення без втрати інформації: GIF (Graphics Interchange Format), TIFF (Tagged Image File Format) - для графічних даних; AVI - для відеоданих; ZIP, ARJ, RAR, CAB, LH - для довільних типів даних.



Стиснення даних зі словником – найпростіший алгоритм стиснення даних.

  • Стиснення даних зі словником – найпростіший алгоритм стиснення даних.

  • Його принцип роботи полягає у частотному аналізі інформації (тексту), виявленню найбільш повторюваних фрагментів (слів) і заміни їх на номер слова у словнику, куди це слово переноситься



Алгоритм RLE (Run Length Encoding) оснований на ідеї виявлення послідовностей даних, що повторюються, та заміни цих послідовностей більш простою структурою, в якій вказується код даних та коефіцієнт повторення. Наприклад, нехай задана така послідовність даних, що підлягає стисненню:

  • Алгоритм RLE (Run Length Encoding) оснований на ідеї виявлення послідовностей даних, що повторюються, та заміни цих послідовностей більш простою структурою, в якій вказується код даних та коефіцієнт повторення. Наприклад, нехай задана така послідовність даних, що підлягає стисненню:

    • 1 1 1 1 2 2 3 4 4 4
  • В алгоритмі RLE пропонується замінити її наступною структурою: 1 4 2 2 3 1 4 3, де перше число кожної пари чисел -це код даних, а друге - коефіцієнт повторення. Якщо для зберігання кожного елементу даних вхідної послідовності відводиться 1 байт, то вся послідовність займатиме 10 байт пам'яті, тоді як вихідна послідовність (стиснений варіант) займатиме 8 байт пам'яті.

  • Алгоритм RLE буде давати кращий ефект стиснення при більшій довжині послідовності даних, що повторюється. У зв'язку з цим найбільша ефективність алгоритму RLE досягається при стисненні графічних даних (особливо для однотонових фонових зображень).



Алгоритм Лемпела-Зіва (LZ) та його модифікація - алгоритм Лемпеля-Зіва-Велча (LZW) наежить до алгоритмів стиснення даних зі словником.

  • Алгоритм Лемпела-Зіва (LZ) та його модифікація - алгоритм Лемпеля-Зіва-Велча (LZW) наежить до алгоритмів стиснення даних зі словником.

  • В основі алгоритмів стиснення даних за словником покладено принцип кодування лексичних одиниць групами байт фіксованої довжини. Прикладом лексичної одиниці може бути звичайне слово. На практиці, в ролі лексичних одиниць вибираються послідовності символів, що повторюються, які кодуються ланцюжком символів (кодом) меншої довжини. Результат кодування зводиться в таблицю, утворюючи так званий словник.

  • Словником в даному алгоритмі є потенційно нескінченний список фраз. Алгоритм починає роботу з майже пустого словника, що містить тільки один закодований рядок, так званий NULL-рядок. Коли зчитується черговий символ вхідної послідовності даних, він додається до поточного рядка. Процес продовжується доти, поки поточний рядок відповідає якій-небудь фразі з словника. Але рано або пізно поточний рядок перестає відповідати якій-небудь фразі словника. У цей момент, коли поточний рядок являє собою останній збіг зі словником плюс щойно прочитаний символ повідомлення, кодер видає код, що складається з індексу збігу і наступного за ним символа, що порушив збіг рядків. Крім того, нова фраза, що складається з індексу збігу і наступного за ним снмвола, додається в словник. У наступний раз, коли ця фраза з'явиться в повідомленні, вона може бути використана для побудови більш довгої фрази, що підвищує міру стиснення інформації.



Алгоритм LZW побудований навколо таблиці фраз (словника), яка відображає рядки символів стиснуваного повідомлення в коди фіксованої довжини. Таблиця володіє так званою властивістю передування, тобто для кожної фрази словника, що складається з деякої фрази w і символа К фраза w також міститься в словнику. Якщо всі частинки словника повністю заповнені кодування перестає бути адаптивним (кодування відбувається виходячи з вже існуючих в словнику фраз).

  • Алгоритм LZW побудований навколо таблиці фраз (словника), яка відображає рядки символів стиснуваного повідомлення в коди фіксованої довжини. Таблиця володіє так званою властивістю передування, тобто для кожної фрази словника, що складається з деякої фрази w і символа К фраза w також міститься в словнику. Якщо всі частинки словника повністю заповнені кодування перестає бути адаптивним (кодування відбувається виходячи з вже існуючих в словнику фраз).

  • Алгоритми стиснення цієї групи найефективніші для текстових даних великих обсягів і малоефективні для файлів малих розмірів (за рахунок необхідності зберігання словника).



В основі алгоритму Хафмана лежить ідея кодування бітовими групами. Спочатку проводиться частотний аналіз вхідної послідовності даних, тобто встановлюється частота входження кожного символу, що зустрічається у ній. Після цього символи сортуються по спаданню частоти входження.

  • В основі алгоритму Хафмана лежить ідея кодування бітовими групами. Спочатку проводиться частотний аналіз вхідної послідовності даних, тобто встановлюється частота входження кожного символу, що зустрічається у ній. Після цього символи сортуються по спаданню частоти входження.

  • Основна ідея полягає в наступному: чим частіше зустрічається символ, тим меншою кількістю біт він кодується. Результат кодування зводиться в словник, що необхідний для декодування.

  • Розглянемо простий приклад, що ілюструє роботу алгоритму Хафмана. Нехай задано текст, в якому літера 'А' входить 10 разів, літера 'B' - 8 раз, 'C'- 6 разів , 'D' - 5 разів, 'E' і 'F' - по 4 рази. Тоді один з можливих варіантів кодування за алгоритмом Хафмана наведений у таблиці




База даних захищена авторським правом ©pres.in.ua 2016
звернутися до адміністрації

    Головна сторінка