1 / 28

Т ема10 Алгоритми випадкових чисел та стиснення даних

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

fairly
Download Presentation

Т ема10 Алгоритми випадкових чисел та стиснення даних

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Тема10 Алгоритми випадкових чисел та стиснення даних

  2. Перелік питань Перелік питань: • Значення випадкових чисел у програмуванні . • Алгоритмигенераціїрівномірнорозподіленихпсевдовипадковихчисел . • Перевірка якості випадкових чисел . • Кодування з виправленням помилок . • Стиснення даних . • Алгоритм стиснення даних RLE. • Алгоритм стиснення даних Лемпела-Зіва . • Алгоритм стиснення даних Хафмана .

  3. 1. Значення випадкових чисел у програмуванні Випадкові числа – числа, значення яких не можна передбачити. Випадкові числа використовуються у статистиці, економіці, математиці, азартних іграх, особливого поширення набули у криптографії У економічній сфері випадкові числа активно використовуються для математичного моделювання економічних процесів – фінансових ринків, інструментів і т.д. Випадкові числа розподілені за різними законами: біноміальним, нормальним, законом Пуассона і т.д. За допомогою комп’ютерів генерація випадкових чисел здійснюється за спеціальними алгоритмами, які у своїй більшості, однак, не можуть гарантувати справжньої випадковості, тому їх називають генераторами псевдовипадкових чисел Деякі генератори псевдовипадкових чисел сприймають певне початкове значення, далі на основі певного алгоритму за допомогою рекурертних співвідношень формують наступні числа. Знаючи алгоритм і його початкові значення можна передбачити числа, що є особливо небезпечно для алгоритмів криптографії.

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

  5. Алгоритмгенерації псевдовипадкових чисел на основі системного часу using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; namespace RandomGenerator { classProgram { staticvoid 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(); } } }

  6. Використання стандартного класу Random в C# using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; namespace RandomGenerator { classProgram { staticvoid Main(string[] args) { Random RandGen = newRandom(); for (int i = 0; i < 10; i++) { int Rand = RandGen.Next(100); Console.WriteLine(Rand); } Console.ReadKey(); } } }

  7. 2. Алгоритми генерації рівномірно розподілених псевдовипадкових чисел • Для генерації рівномірно розподілених псевдовипадкових чисел можна застосовувати найпростіший алгоритм, оснований на наступному рекуррертному співвідношенні: I(n+1)=(a*I(n)+c)(mod m) • де число a називається мультиплікатором; • число c – інкрементом; • число m - модулем

  8. Приклад генератора рівномірно розподілених псевдовипадкових чисел using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; namespace RandomGenerator { classProgram { staticint next = 1; staticint GetRand() { next = next * 1103515245 + 12345; return((int)(next/65536)%32768); } staticvoid Main(string[] args) { for (int i = 0; i < 10; i++) { int Rand = Math.Abs(GetRand() % 100); Console.WriteLine(Rand); } Console.ReadKey(); } } }

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

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

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

  12. Поблокова перевірка парності/непарності

  13. Алгоритм CRC Алгоритм CRC (Cyclic Redundancy Check) є одним з найпоширеніших алгоритмів контролю цілісності даних. Ідея алгоритму полягає у наступному: будь-яка послідовність даних може бути представлена у вигляді послідовності двійкових бітів, поділивши цю послідовність на деяке фіксоване число можна отримати залишок від ділення, який і буде являти собою шукану контрольну суму. Незначні зміни даних, як правило, приводять до суттєвих змін залишку, у такому разі алгоритм дозволяє дуже ефективно виявляти помилки у даних. Для зручності розрахунку CRC операції проводяться над поліномами, за допомогою яких представляються числа. Існують стандартизовані поліноми:

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

  15. Приклад використання коду Хемінга Приклад. Необхідно передати літеру s = 1110011. Передача буде здійснюватись наступним чином: (*) – місце для контрольних бітів, ціла ступінь 2 (1,2,4,8) Контрольна сума визначається як операція XOR над кодами позицій ненульових бітів. У даному разі це 11, 10, 9, 5 та 3. Розрахунок: Таким чином, передаватися буде наступний код: У даному разі контрольна сума за операцією XOR для усіх ненульових бітів буде рівна нулю:

  16. Приклад використання коду Хемінга (продовж.) • Тепер уявимо, що виникла помилка у біті посилки №7 (1 замість 0), розрахунок контрольної суми дасть наступний результат: • Отримана ненульова контрольна сума свідчить про наявність помилки, а її значення – позицію біта, який необхідно інвертувати: • 1112 = 710

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

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

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

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

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

  22. Якщо при стисненні даних відбувається тільки зміна структури даних, то метод стиснення є зворотнім. У цьому випадкові з архіву можна відновити інформацію повністю. Зворотні методи стиснення можна застосовувати до будь-яких типів даних, але вони дають менший ступінь стиснення у порівнянні з незворотними методами стиснення. Приклади форматів стиснення без втрати інформації: GIF (Graphics Interchange Format), TIFF (Tagged Image File Format) - для графічних даних; AVI - для відеоданих; ZIP, ARJ, RAR, CAB, LH - для довільних типів даних.

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

  24. Алгоритм стиснення даних RLE • Алгоритм 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 досягається при стисненні графічних даних (особливо для однотонових фонових зображень).

  25. 7. Алгоритм стиснення даних Лемпела-Зіва Алгоритм Лемпела-Зіва (LZ) та його модифікація - алгоритм Лемпеля-Зіва-Велча (LZW) наежить до алгоритмів стиснення даних зі словником. В основі алгоритмів стиснення даних за словником покладено принцип кодування лексичних одиниць групами байт фіксованої довжини. Прикладом лексичної одиниці може бути звичайне слово. На практиці, в ролі лексичних одиниць вибираються послідовності символів, що повторюються, які кодуються ланцюжком символів (кодом) меншої довжини. Результат кодування зводиться в таблицю, утворюючи так званий словник. Словником в даному алгоритмі є потенційно нескінченний список фраз. Алгоритм починає роботу з майже пустого словника, що містить тільки один закодований рядок, так званий NULL-рядок. Коли зчитується черговий символ вхідної послідовності даних, він додається до поточного рядка. Процес продовжується доти, поки поточний рядок відповідає якій-небудь фразі з словника. Але рано або пізно поточний рядок перестає відповідати якій-небудь фразі словника. У цей момент, коли поточний рядок являє собою останній збіг зі словником плюс щойно прочитаний символ повідомлення, кодер видає код, що складається з індексу збігу і наступного за ним символа, що порушив збіг рядків. Крім того, нова фраза, що складається з індексу збігу і наступного за ним снмвола, додається в словник. У наступний раз, коли ця фраза з'явиться в повідомленні, вона може бути використана для побудови більш довгої фрази, що підвищує міру стиснення інформації.

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

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

More Related