Алгоритм Хаффмана
Алгоритм Хаффмана – это метод оптимального префиксного кодирования алфавита с минимальной избыточностью. Этот алгоритм был разработан в 1952 году американским ученым Дэвидом Хаффманом и с тех пор нашел широкое применение в сжатии данных, передаче информации и уменьшении объема цифровых файлов.
Основная идея алгоритма Хаффмана заключается в построении двоичного дерева, в котором более частые символы получают более короткие кодовые слова, а менее частые – более длинные. Это позволяет сократить объем информации и уменьшить избыточность кода.
Шаги построения дерева Хаффмана
Для построения дерева Хаффмана для заданной фразы необходимо выполнить следующие шаги:
Шаг 1: Подсчет частоты символов
Сначала подсчитываем частоту встречаемости каждого символа в данной фразе. В нашем случае, фраза «Королева кавалеру подарила каравеллу» содержит следующие символы: {‘К’: 2, ‘о’: 6, ‘р’: 3, ‘л’: 4, ‘е’: 2, ‘в’: 3, ‘а’: 7, ‘ ‘: 5, ‘к’: 2, ‘д’: 1, ‘и’: 1, ‘ж’: 1, ‘м’: 1, ‘у’: 2}.
Шаг 2: Построение очереди приоритетов
Далее строим очередь приоритетов, в которой каждый узел представляет собой символ и его частоту встречаемости. Сначала добавляем все символы с их частотами в очередь, затем сортируем их по возрастанию частоты.
Шаг 3: Построение дерева Хаффмана
Для построения дерева Хаффмана извлекаем два узла с наименьшими частотами из очереди приоритетов и создаем новый узел, у которого сумма частот равна сумме частот этих двух узлов. Далее добавляем этот новый узел в очередь и повторяем процесс, пока в очереди не останется только один узел – корень дерева Хаффмана.
Шаг 4: Создание кодовых слов
Для получения кодовых слов для каждого символа обходим дерево Хаффмана от корня к каждому листу, записывая 0 при переходе влево и 1 при переходе вправо. Таким образом, каждому символу будет соответствовать уникальное кодовое слово.
Пример построения дерева Хаффмана
Рассмотрим пример построения дерева Хаффмана для фразы «Королева кавалеру подарила каравеллу».
1. Подсчитываем частоту символов:
{‘К’: 2, ‘о’: 6, ‘р’: 3, ‘л’: 4, ‘е’: 2, ‘в’: 3, ‘а’: 7, ‘ ‘: 5, ‘к’: 2, ‘д’: 1, ‘и’: 1, ‘ж’: 1, ‘м’: 1, ‘у’: 2}
2. Строим очередь приоритетов:
{(‘д’, 1), (‘и’, 1), (‘ж’, 1), (‘м’, 1), (‘у’, 2), (‘К’, 2), (‘е’, 2), (‘к’, 2), (‘р’, 3), (‘в’, 3), (‘л’, 4), (‘ ‘, 5), (‘р’, 7)}
3. Построение дерева Хаффмана:
____[12]
/
[5] [7]_
/ /
[2] [3] [3] [4]
/ / / /
(д,и,ж,м) (у,К,е,к) (р,в,л, ,а)
4. Создание кодовых слов для символов:
{‘К’: 01, ‘о’: 10, ‘р’: 11, ‘л’: 00, ‘е’: 010, ‘в’: 10, ‘а’: 11, ‘ ‘: 00, ‘к’: 011, ‘д’: 000, ‘и’: 001, ‘ж’: 0101, ‘м’: 0111, ‘у’: 110}
Заключение
Дерево Хаффмана — это эффективный метод построения оптимального алгоритма кодирования, который позволяет минимизировать избыточность информации и создавать компактные кодовые слова для символов. Благодаря этому алгоритму можно существенно уменьшить объем передаваемых данных и повысить скорость их обработки. Построение дерева Хаффмана для фразы «Королева кавалеру подарила каравеллу» демонстрирует принцип работы этого метода и позволяет понять, как коды получат символы в зависимости от их частоты встречаемости.