### Лабораторные работы

## Рекомендации к выполнению лабораторных работ

Скачать материалы к лабораторным работам в формате DOC Microsoft Word

### Правила выполнения работ

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

Задания практических работ выполняются только на языке программирования С/С++, среда программирования по выбору студента.

Изучаемые методы кодирования данных рекомендуется программно реализовывать в виде отдельных функций (подпрограмм), данные должны передаваться в подпрограммы в качестве параметров. Заполнение массивов данными, вывод их на экран, вычисление вспомогательных величин и пр. необходимо также оформлять в виде отдельных подпрограмм.

При выполнении заданий следует обеспечить вывод на экран данных на всех шагах алгоритма. Программа должна иметь дружественный, интуитивно понятный интерфейс (меню пользователя, вывод подсказок, комментарии при вводе/выводе данных и т.д.).

Тестирование разработанной программы необходимо проводить для текстовых файлов с различным частотным распределением символов. После тестирования необходимо проанализировать полученные результаты, т.е. проверить соответствие полученных экспериментальным путем величин теоретическим оценкам.

Для зачета по практической работе студенту необходимо представить

- Исходные тексты программ с подробными комментариями;
- Исполняемые файлы и тестовые файлы;
- Отчет по практической работе.

Отчет должен включать в себя следующие разделы

- Формулировку задания
- Очень краткое описание алгоритмов, используемых в лабораторной работе;
- Результаты работы программы (в виде файла или в виде скриншота);
- Анализ и сравнение полученных результатов с теоретическими оценками.

### Лабораторная работа №1
Вычисление энтропии Шеннона

Цель работы: Экспериментальное изучение свойств энтропии Шеннона.

Среда программирования: любая с С-подобным языком программирования.

Результат: программа, тестовые примеры, отчет.

Задание:

1. Для выполнения этой практической работы необходимо иметь три файла. Объем каждого файла больше 10 Кб, формат txt.

В первом файле должна содержаться последовательность символов (количество различных символов больше 3) с равномерным распределением, т.е. символы в файле встречаются равновероятно и независимо.

Второй файл должен содержать независимую последовательность символов (количество различных символов больше 3) с неравновероятным распределением. Вероятности символов должны быть заданы заранее, до создания файла.

Эти два файла необходимо сгенерировать программно, используя генератор псевдослучайных чисел.

В третьем файле содержится фрагмент художественного текста на русском или английском языке. Для художественных текстов (русский или английский языки) предполагается, что строчные и заглавные символы не отличаются, знаки препинания объединены в один символ, к алфавиту добавлен пробел, для русских текстов буквы «е» и «ё», «ь» и «ъ» совпадают. При использовании текста программы учитываются все символы, кроме знаков табуляции.

2. Составить программу, определяющую оценки энтропии имеющихся текстовых файлов.

Для вычисления оценки энтропии необходимо программно вычислить частоты символов (пар символов) в файле, которые будут оценками реальных вероятностей символов, а затем, используя формулу Шеннона, вычислить оценки энтропии файла.

По желанию можно продолжить процесс вычисления оценок с использованием частот троек, четверок символов и т.д.

Для того чтобы правильно рассчитать частоты двойных комбинаций символов пары символов нужно рассматривать так

Пусть имеется такая последовательность

фывафпро

Под парами понимаются пары соседних символов, т.е.

фы ыв ва аф фп пр ро

Далее для получения оценки энтропии подсчитать частоту встречаемости для каждой пары и подставить в формулу Шеннона. Полученное значение оценки энтропии следует разделить на 2.

3. После тестирования программы необходимо заполнить таблицу для отчета и проанализировать полученные результаты. Сравните полученные оценки между собой. Объясните полученные результаты

| Оценка энтропии (частоты отдельных символов) | Оценка энтропии (частоты пар символов) | Теоретическое значение энтропии
Файл 1 |  |  |
Файл 2 |  |  |
фрагмент художественного произведения |  |  |

### Лабораторная работа №2
Оптимальное побуквенное кодирование

Цель работы: Изучение метода оптимального кодирования Хаффмана.

Среда программирования: любая с С-подобным языком программирования.

Результат: программа, тестовые примеры, отчет.

Задание:

1. Запрограммировать процедуру двоичного кодирования текстового файла методом Хаффмана. Текстовые файлы использовать те же, что и в практической работе №1. Для художественных текстов (русский или английский языки) предполагается, что строчные и заглавные символы не отличаются, знаки препинания объединены в один символ, к алфавиту добавлен пробел, для русских текстов буквы «е» и «ё», «ь» и «ъ» совпадают.

2. Проверить, что полученный код является префиксным.

3. После кодирования текстового файла вычислить оценки энтропии выходной последовательности, используя частоты отдельных символов, пар символов и троек символов.

4. Заполнить таблицу и проанализировать полученные результаты.

Метод кодирования | Название текста | Оценка избыточности кодирования | Оценка энтропии выходной посл-ти (частоты символов) | Оценка энтропии выходной посл-ти (частоты пар символов) | Оценка энтропии выходной посл-ти (частоты троек символов)
Метод Хаффмана | Файл 1 |  |  |  |
Файл 2 |  |  |  |
фрагмент художественного произведения |  |  |  |

Избыточность кодирования определяется как , где H – энтропия текста, Lcp – средняя длина кодового слова.

### Лабораторная работа №3
Методы почти оптимального кодирования

Цель работы: Изучение метода почти оптимального кодирования Фано. Изучение метода почти оптимального кодирования Шеннона

Среда программирования: любая с С-подобным языком программирования.

Результат: программа, тестовые примеры, отчет.

Задание:

1. Запрограммировать процедуры двоичного кодирования текстового файла методом Фано и процедуру двоичного кодирования текстового файла методом Шеннона. Текстовые файлы использовать те же, что и в практической работе №1. Для художественных текстов (русский или английский языки) предполагается, что строчные и заглавные символы не отличаются, знаки препинания объединены в один символ, к алфавиту добавлен пробел, для русских текстов буквы «е» и «ё», «ь» и «ъ» совпадают.

2. Проверить, что полученные коды являются префиксными.

3. Для каждого метода кодирования после кодирования вычислить оценки энтропии выходной последовательности, используя частоты отдельных символов, пар символов и тройки символов.

4. После тестирования программы необходимо заполнить таблицу и проанализировать полученные результаты.

Метод кодирования | Файлы | Оценка избыточности кодирования | Оценка энтропии выходной посл-ти (частоты символов) | Оценка энтропии выходной посл-ти (частоты пар символов) | Оценка энтропии выходной посл-ти (частоты троек символов)
Метод Хаффмана | Файл 1 |  |  |  |
Файл 2 |  |  |  |
фрагмент художественного произведения |  |  |  |
Метод Фано | Файл 1 |  |  |  |
Файл 2 |  |  |  |
фрагмент художественного произведения |  |  |  |
Метод Шеннона | Файл 1 |  |  |  |
Файл 2 |  |  |  |
фрагмент художественного произведения |  |  |  |

Избыточность кодирования определяется как , где H – энтропия текста, Lcp – средняя длина кодового слова.