- •2. Построение оптимальных кодов. Алгоритмы сжатия данных
- •I. Блок индивидуальных заданий.
- •2.1. Кодирование методом Хаффмана.
- •2.2 Арифметическое кодирование.
- •2.3. Словарный алгоритм lz77.
- •2.4. Словарный алгоритм lzss.
- •2.5. Словарный алгоритмLz78.
- •2.6. Сравнительный анализ словарных алгоритмов.
- •2.7. Анализ влияния параметров словаря на алгоритмы lz77 иLzss.
- •II. Блок общих заданий.
- •График сдачи:
2.2 Арифметическое кодирование.
(30 баллов)
Цель: закрепить понимание арифметического кодирования, научиться кодировать и раскодировать данные с помощью этого алгоритма.
Задание: а) перед вами список символов, из которых состоит закодированный текст и вероятность каждого символа в тексте. О закодированном тексте известно количество символов в нем и число – результат арифметического кодирования. Пользуясь этой информацией, сформируйте диапазоны для заданных символов и расшифруйте текст. Переведите кодовое число в двоичный формат и подсчитайте коэффициент сжатия. Определите, каким бы мог быть максимальный коэффициент сжатия, пользуясь теоремой Шеннона (предполагая, что мы выделяем–log2(p) бит на каждый символ, гдеp – вероятность этого символа. б) выберите самостоятельно текст для кодирования (около 10 символов). Определите статистику символов и их вероятности. Закодируйте текст с помощью арифметического кодирования. Определите коэффициент сжатия. Определите, каким бы мог быть максимальный коэффициент сжатия и сравните его с полученным.
Вариант |
Символы и их вероятности |
Кол-во символов |
Кодовое число |
|
"е" - 0,2; "р" - 0,2; "п" - 0,1; "к" - 0,1; "у" - 0,1; "и" - 0,1; "т" - 0,1; "ь" - 0,1; |
10 |
0,404450863599777 |
|
"о" - 0,2; "р" - 0,1; "п" - 0,1; "в" - 0,1; "к" - 0,1; "а" - 0,1; "ц" - 0,1; "и" - 0,1; "я" - 0,1; |
10 |
0,320822715759277 |
|
"е" - 0,4; "р" - 0,2; "т" - 0,2; "п" - 0,1; "ь" - 0,1; |
10 |
0,818038463592529 |
|
"а" - 0,3; "р" - 0,1; "с" - 0,1; "п" - 0,1; "ш" - 0,1; "о" - 0,1; "н" - 0,1; "к" - 0,1; |
10 |
0,313561102375388 |
|
"е" - 0,3; "р" - 0,2; "п" - 0,1; "з" - 0,1; "а" - 0,1; "т" - 0,1; "ь" - 0,1; |
10 |
0,509613327682018 |
|
"е" - 0,3; "н" - 0,2; "р" - 0,1; "м" - 0,1; "б" - 0,1; "ы" - 0,1; "й" - 0,1; |
10 |
0,715550690889359 |
|
"е" - 0,3; "р" - 0,2; "п" - 0,1; "м" - 0,1; "я" - 0,1; "т" - 0,1; "ь" - 0,1; |
10 |
0,510104730725288 |
|
"е" - 0,2; "р" - 0,2; "а" - 0,2; "м" - 0,1; "п" - 0,1; "т" - 0,1; "ь" - 0,1; |
10 |
0,704517051577568 |
|
"е" - 0,3; "н" - 0,2; "р" - 0,1; "м" - 0,1; "п" - 0,1; "ы" - 0,1; "й" - 0,1; |
10 |
0,715550690889359 |
|
"о" - 0,4; "д" - 0,2; "в" - 0,2; "п" - 0,1; "р" - 0,1; |
10 |
0,637712478637695 |
|
а" - 0,4; "м" - 0,1; "д" - 0,1; "г" - 0,1; "с" - 0,1; "к" - 0,1; "р" - 0,1; |
10 |
0,421010166406631 |
|
"е" - 0,3; "т" - 0,2; "л" - 0,1; "м" - 0,1; "р" - 0,1; "и" - 0,1; "я" - 0,1; |
10 |
0,331104725599289 |
|
"е" - 0,3; "п" - 0,1; "р" - 0,1; "м" - 0,1; "ш" - 0,1; "а" - 0,1; "т" - 0,1; "ь" - 0,1; |
10 |
0,312468331307173 |
|
"о" - 0,3; "н" - 0,2; "в" - 0,1; "м" - 0,1; "д" - 0,1; "ы" - 0,1; "й" - 0,1; |
10 |
0,331120386719704 |
|
"о" - 0,3; "д" - 0,1; "б" - 0,1; "р" - 0,1; "в" - 0,1; "л" - 0,1; "е" - 0,1; "ц" - 0,1; |
10 |
0,313556130975485 |
|
"е" - 0,2; "н" - 0,2; "р" - 0,1; "п" - 0,1; "о" - 0,1; "с" - 0,1; "ы" - 0,1; "й" - 0,1; |
10 |
0,50813390314579 |
|
"е" - 0,2; "п" - 0,1; "р" - 0,1; "в" - 0,1; "о" - 0,1; "д" - 0,1; "ч" - 0,1; "и" - 0,1; "к" - 0,1; |
10 |
0,206182715948671 |
|
"а" - 0,2; "т" - 0,2; "р" - 0,1; "ш" - 0,1; "ю" - 0,1; "п" - 0,1; "и" - 0,1; "с" - 0,1; |
10 |
0,708225514739752 |
|
"а" - 0,4; "к" - 0,2; "р" - 0,1; "т" - 0,1; "и" - 0,1; "ц" - 0,1; |
10 |
0,449482083320618 |
|
"е" - 0,2; "п" - 0,2; "л" - 0,1; "ь" - 0,1; "н" - 0,1; "и" - 0,1; "ц" - 0,1; "а" - 0,1; |
10 |
0,208730863407254 |
|
"е" - 0,2; "б" - 0,1; "л" - 0,1; "о" - 0,1; "с" - 0,1; "н" - 0,1; "ж" - 0,1; "к" - 0,1; "а" - 0,1; |
10 |
0,20691231591627 |
|
"о" - 0,2; "п" - 0,1; "р" - 0,1; "д" - 0,1; "и" - 0,1; "с" - 0,1; "т" - 0,1; "ы" - 0,1; "й" - 0,1; |
10 |
0,206182715948671 |
|
"е" - 0,2; "н" - 0,2; "р" - 0,1; "в" - 0,1; "я" - 0,1; "д" - 0,1; "ы" - 0,1; "й" - 0,1; |
10 |
0,708225103095174 |
|
"н" - 0,2; "т" - 0,1; "е" - 0,1; "к" - 0,1; "л" - 0,1; "я" - 0,1; "с" - 0,1; "ы" - 0,1; "й" - 0,1; |
10 |
0,723456035833806 |
|
"н" - 0,2; "т" - 0,2; "к" - 0,1; "ц" - 0,1; "е" - 0,1; "о" - 0,1; "р" - 0,1; "а" - 0,1; |
10 |
0,471121514216065 |
|
"о" - 0,2; "в" - 0,1; "р" - 0,1; "б" - 0,1; "ь" - 0,1; "и" - 0,1; "н" - 0,1; "ы" - 0,1; "й" - 0,1; |
10 |
0,206182715948671 |
|
"о" - 0,3; "р" - 0,2; "л" - 0,2; "м" - 0,1; "т" - 0,1; "е" - 0,1; |
10 |
0,724304437637329 |
|
"д" - 0,2; "а" - 0,2; "е" - 0,1; "н" - 0,1; "в" - 0,1; "ц" - 0,1; "т" - 0,1; "ь" - 0,1; |
10 |
0,129045903682709 |
|
"е" - 0,2; "б" - 0,1; "с" - 0,1; "ц" - 0,1; "в" - 0,1; "т" - 0,1; "н" - 0,1; "ы" - 0,1; "й" - 0,1; |
10 |
0,206902715843171 |
|
"т" - 0,2; "а" - 0,2; "и" - 0,1; "н" - 0,1; "р" - 0,1; "д" - 0,1; "ц" - 0,1; "ь" - 0,1; |
10 |
0,129071295261383 |