- •2. Построение оптимальных кодов. Алгоритмы сжатия данных
- •I. Блок индивидуальных заданий.
- •2.1. Кодирование методом Хаффмана.
- •2.2 Арифметическое кодирование.
- •2.3. Словарный алгоритм lz77.
- •2.4. Словарный алгоритм lzss.
- •2.5. Словарный алгоритмLz78.
- •2.6. Сравнительный анализ словарных алгоритмов.
- •2.7. Анализ влияния параметров словаря на алгоритмы lz77 иLzss.
- •II. Блок общих заданий.
- •График сдачи:
2. Построение оптимальных кодов. Алгоритмы сжатия данных
I. Блок индивидуальных заданий.
2.1. Кодирование методом Хаффмана.
(30 баллов)
Цель: научиться генерировать коды Хаффмана и пользуясь ими (кодировать/ раскодировать) заданный текст.
Задание: а) перед вами список символов, из которых состоит закодированный текст и вероятность каждого символа в тексте. Пользуясь этой информацией, сгенерируйте коды Хаффмана и расшифруйте закодированный в соседней колонке текст. Подсчитайте коэффициент сжатия. Определите, каким бы мог быть максимальный коэффициент сжатия, пользуясь теоремой Шеннона (предполагая, что мы выделяем–log2(p) бит на каждый символ, гдеp – вероятность этого символа. б) выберите самостоятельно текст для кодирования (не менее 10 символов). Определите статистику символов и их вероятности. Сгенерируйте коды Хаффмана. Закодируйте текст с помощью этих кодов. Определите коэффициент сжатия. Определите, каким бы мог быть максимальный коэффициент сжатия и сравните его с полученным.
Вариант |
Символы и их вероятности |
Закодированное слово |
|
«т»-0.15; «а»-0.15; «л»-0.15; «о»-0.15; «м»-0.08; «е»-0.08; «п»-0.08; «р»-0.08; «к» - 0.08. |
10100000010100110111000001110100111010001 |
|
«о»-0.36; «д»-0.09; «б»-0.09; «р»-0.09; «в»-0.09; «л»-0.09; «ь»-0.09; «н»-0.09; |
0011101010111010010010000000011 |
|
«а»-0.25; «о»-0.17; «р»-0.17; «л»-0.08; «б»-0.08; «т»-0.08; «н»-0.08; «я»-0.08; |
10010110111000011000110000010010011 |
|
«и»-0.23; «о»-0.15; «я»-0.15; «р»-0.08; «г»-0.08; «з»-0.08; «л»-0.08; «д»-0.08; «ц»-0.08; |
0001101100011011100000011001001011110010 |
|
«о»-0.31; «д»-0.08; «р»-0.08; «г»-0.08; «с»-0.08; «т»-0.08; «я»-0.08; «щ»-0.08; «и»-0.08; «й»-0.08; |
00010111101100101101100001110000000100011 |
|
«е»-0.15; «л»-0.15; «т»-0.15; «и»-0.15; «р»-0.08; «б»-0.08; «с»-0.08; «к»-0.08; «а»-0.08; |
10101100100101101000011000000010100110111 |
|
«а»-0.18; «о»-0.18; «р»-0.18; «л»-0.09; «б»-0.09; «т»-0.09; «и»-0.09; «я»-0.09; |
010100101110110010100101100000001 |
|
«с»-0.23; «н»-0.15; «к»-0.08; «у»-0.08; «т»-0.08; «в»-0.08; «е»-0.08; «и»-0.08; «ы»-0.08; «й»-0.08; |
000010000111110100101010011001101100100011 |
|
«и»-0.23; «е»-0.15; «р»-0.08; «п»-0.08; «о»-0.08; «д»-0.08; «ч»-0.08; «с»-0.08; «к»-0.08; «й»-0.08; |
111011000110010101001011001100000010100011 |
|
«р»-0.14; «а»-0.14; «и»-0.14; «н»-0.14; «о»-0.07; «ц»-0.07; «л»-0.07; «ь»-0.07; «ы»-0.07; «й»-0.07; |
0111111010001101100011010100010000010110001001 |
|
«и»-0.33; «м»-0.08; «с»-0.08; «т»-0.08; «ф»-0.08; «к»-0.08; «а»-0.08; «ц»-0.08; «я»-0.08; |
011110001001110010100000110010010101 |
|
«а»-0.17; «н»-0.17; «ц»-0.08; «и»-0.08; «о»-0.08; «р»-0.08; «л»-0.08; «ь»-0.08; «ы»-0.08; «й»-0.08; |
0110110011010101111011010000101000000001 |
|
«с»-0.25; «и»-0.25; «е»-0.12; «п»-0.06; «м»-0.06; «т»-0.06; «ч»-0.06; «к»-0.06; «й»-0.06; |
1001110000001101101001010011000110001110011111 |
|
«о»-0.27; «р»-0.09; «п»-0.09; «в»-0.09; «л»-0.09; «ч»-0.09; «н»-0.09; «ы»-0.09; «й»-0.09; |
1010011011110111001100001000000001 |
|
«а»-0.25; «з»-0.08; «м»-0.08; «р»-0.08; «и»-0.08; «н»-0.08; «о»-0.08; «в»-0.08; «т»-0.08; «ь»-0.08; |
000101111011001101100011000000100100011 |
|
«и»-0.27; «с»-0.18; «м»-0.09; «т»-0.09; «ч»-0.09; «е»-0.09; «к»-0.09; «й»-0.09; |
10101000111011101000000010010011 |
|
«р»-0.18; «и»-0.18; «г»-0.09; «е»-0.09; «с»-0.09; «т»-0.09; «а»-0.09; «ц»-0.09; «я»-0.09; |
10010100010010110100100000110001111 |
|
«и»-0.27; «е»-0.09; «р»-0.09; «в»-0.09; «ф»-0.09; «к»-0.09; «а»-0.09; «ц»-0.09; «я»-0.09; |
1110011101011100110000100000010001 |
|
«е»-0.18; «р»-0.18; «п»-0.09; «с»-0.09; «т»-0.09; «о»-0.09; «й»-0.09; «к»-0.09; «а»-0.09; |
00011000110010101100101000000110111 |
|
«е»-0.18; «о»-0.18; «в»-0.18; «л»-0.09; «м»-0.09; «з»-0.09; «с»-0.09; «т»-0.09; |
010001100100101011011000000011110 |
|
«е»-0.25; «р»-0.17; «т»-0.17; «с»-0.08; «м»-0.08; «о»-0.08; «п»-0.08; «ь»-0.08; |
00100111011001101100000011010000011 |
|
«е»-0.33; «н»-0.17; «р»-0.08; «в»-0.08; «д»-0.08; «п»-0.08; «ы»-0.08; «й»-0.08; |
0100101011011110110100000000100011 |
|
«о»-0.27; «р»-0.18; «у»-0.09; «б»-0.09; «т»-0.09; «п»-0.09; «в»-0.09; «д»-0.09; |
11000010111101100000010010010011 |
|
«б»-0.18; «о»-0.18; «с»-0.09; «п»-0.09; «е»-0.09; «д»-0.09; «н»-0.09; «ы»-0.09; «й»-0.09; |
10011000101010010100001100000110111 |
|
«а»-0.36; «р»-0.18; «т»-0.09; «б»-0.09; «щ»-0.09; «и»-0.09; «н»-0.09; |
01011000101110000100001000111 |
|
«а»-0.27; «т»-0.27; «р»-0.09; «с»-0.09; «н»-0.09; «е»-0.09; «ц»-0.09; |
01000100100110101001000110111 |
|
«о»-0.27; «н»-0.18; «с»-0.09; «т»-0.09; «р»-0.09; «п»-0.09; «и»-0.09; «й»-0.09; |
10001101111011100100000000100011 |
|
«е»-0.18; «р»-0.18; «о»-0.18; «г»-0.09; «п»-0.09; «д»-0.09; «к»-0.09; «а»-0.09; |
011001100010101111011010000000001 |
|
«п»-0.18; «о»-0.18; «е»-0.18; «р»-0.09; «д»-0.09; «б»-0.09; «н»-0.09; «ы»-0.09; «й»-0.09; |
10010100011000101100101000000110111 |
|
«е»-0.27; «р»-0.18; «п»-0.09; «в»-0.09; «н»-0.09; «у»-0.09; «т»-0.09; «ь»-0.09; |
10101000011110100011010000100011 |