- •5.3 Контроль достовірності передачі
- •Коди, що самовідновлюються
- •Систематичні коди
- •5.4 Алгоритми стиснення даних
- •5.4.1 Алгоритм rle
- •5.4.2 Алгоритм Лемпела –Зіва
- •5.4.3 Кодування Шеннона-Фано
- •5.4.4 Алгоритм Хаффмана
- •Питання
- •6 Середовища передавання даних. Лінії зв’язку
- •6.1 Сeредовища передавання даних
- •6.2 Лінії зв'язку
- •6.2.1 Мідні кабелі: коаксіальний кабель (coaxial)
- •6.2.2 Мідні кабелі: кабелі на основі скручених пар
- •6.2.3 Волоконно-оптичний кабель
- •6.3 Безпровідні середовища передачі даних (радіоканали наземного і супутникового зв'язку)
- •6.3.1 Інфрачервоні канали (InfraReD channel)
- •6.3.2 Радіохвилі, сигнали з вузькосмуговим спектром.
- •6.3.3 Радіохвилі, сигнали з широкосмуговим спектром.
- •6.3.4 Супутниковий зв'язок
- •6.3.5 Стільниковий зв'язок
- •Питання
- •7 Локальні мережі ethernet
- •7.1 Стандарти локальних мереж ieee 802
- •7.2 Протокол управління логічним каналом ieee 802.2
5.4.2 Алгоритм Лемпела –Зіва
Найширше використовуються словарні алгоритми з сімейства LZ, чия ідея була описана Лемпелом і Зівом в 1977 році. Існує безліч модифікацій цього алгоритму, що відрізняються способами зберігання словника, додавання слова в словник і пошуку слова в словнику.
Словом в цьому алгоритмі називається послідовність символів (не обов'язково співпадаюча зі словом природної мови). Слова зберігаються в словнику, а їх входження в початкові дані замінюються адресами (номерами) слів в словнику. Деякі різновиди алгоритму зберігають окремо словник і окремо упаковані дані у вигляді послідовності номерів слів. Інші вважають словником весь вже накопичений результат стиснення. Наприклад, стислий файл може складатися із записів вигляду [а,l,t], де а – адреса (номер позиції), з якої починається такий же рядок довжини l, що і поточний рядок. Якщо a>0, то запис прочитався посиланням на словник і поле t (текст) в ній – порожнє. Якщо а = 0, то в полі t записані l символів, які до цих пір в такій послідовності не зустрічалися.
Алгоритм стиснення полягає в постійному пошуку у вже упакованій частині даних максимальної послідовності символів, співпадаючої з послідовністю, що починається з поточної позиції. Якщо така послідовність (довжини > 3) знайдена, в результат записується її адреса і довжина. В іншому разі в результат записується 0, довжина послідовності і сама (нестиснута) послідовність.
5.4.3 Кодування Шеннона-Фано
Методи ефективного кодування повідомлень для передачі дискретним каналом без перешкод, запропоновані Шенноном і Фано, заклали основу статистичних методів стиснення даних.
Код Шеннона-Фано: символи алфавіту виписують в таблицю в порядку зменшення імовірності. Потім їх розділяють на дві групи так, щоб суми імовірностей в кожній з груп були максимально близькі (по можливості, рівні). У кодах символів верхньої групи перший біт встановлюється рівним 0, в нижній групі – 1. Потім кожну з груп розбивають на дві підгрупи з однаковими сумами імовірностей, і процес призначення бітів коду продовжується по аналогії з першим кроком. Кодування завершується, коли в кожній групі залишиться по одному символу.
Якість кодування по Шеннону-Фано залежить від вибору розбиття на підгрупи: чим більша різниця сум імовірностей підгруп, тим більш надмірним виявляється код. Для подальшого зменшення надмірності, використовують кодування великими блоками – як “символи” використовуються комбінації початкових символів повідомлення, але і цей підхід має ті ж обмеження. Від вказаного недоліку вільна методика кодування Хафмана.
5.4.4 Алгоритм Хаффмана
Алгоритм Хаффмана гарантує однозначну побудову коду з найменшим для даного розподілу імовірності середнім числом символів коду на символ повідомлення. На першому кроці підраховуються частоти всіх символів в початкових даних. На другому кроці будуються нові коди (бітові послідовності) для кожного символу, так, щоб ніякі дві різні послідовності не мали загального початку, наприклад, три послідовності 0, 10, 110. задовольняють цій вимозі. Хаффман запропонував будувати двійкове дерево символів, в корені якого знаходиться найбільш частий символ, на відстані 1 від кореня – наступні по частоті символи, і так далі. На основі такого дерева коди для символів виходять шляхом виконання простої процедури обходу дерева. Кодом є шлях від кореня до символу, в якому 1 означає перехід по лівій гілці, а 0 – по правій. Такий спосіб побудови гарантує потрібну властивість коду. Нарешті, на останньому кроці у вихідні дані записується побудоване дерево, а за ним надходять закодовані дані.
Алгоритм Хаффмана забезпечує високу швидкість пакування і розпаковування, але ступінь стиснення, що досягається при його використанні, досить невеликий. Одним з недоліків цього алгоритму є необхідність двох проходів по даним – на першому проході підраховуються частоти, будується дерево і формуються коди, а на другому виконується власне кодування. Цього недоліку позбавлений адаптивний алгоритм Хаффмана, такий, що перераховує частоти символів (і, відповідно, змінює коди) в міру надходження даних.
Резюме
Для підвищення корисної швидкості передавання даних у мережах застосована динамічна компресія даних на базі різних алгоритмів. Коефіцієнт стиснення залежить від типу даних та використаного алгоритму і може бути в межах від 1:2 до 1:8. Економічно вигідно стискати дані перед передаванням, щоб зменшити кількість бітів.Цього можна досягти за допомогою попереднього редагування інформації, але найчастіше для стиснення використовують алгоритми Лемпеля-Зива, оптимальне кодування кодами Хаффмана або Шеннона-Фано. Ступінь стиснення залежить від виду інформації, що передається (графічну стиснути важко, текстову- значно легше, на 30-40%)
