Алгоритм Хаффмана: построение дерева для заданной фразы
Что такое алгоритм Хаффмана?
Алгоритм Хаффмана — это метод сжатия данных, который использует дерево Хаффмана для оптимального кодирования символов в заданной последовательности.
Постановка задачи
Для фразы «королева кавалеру подарила каравеллу» необходимо построить дерево Хаффмана и определить коды для каждого символа.
Подготовка к построению дерева
Сначала необходимо подсчитать частоту встречаемости каждого символа в заданной фразе:
- к — 5 раз
- о — 4 раза
- р — 3 раза
- л — 3 раза
- е — 2 раза
- а — 4 раза
- в — 2 раза
- у — 2 раза
- п — 1 раз
- д — 1 раз
- и — 1 раз
- а — 1 раз
Построение дерева Хаффмана
Для построения дерева Хаффмана необходимо объединять символы с наименьшей частотой встречаемости и строить новые вершины дерева, пока все символы не будут объединены в одной вершине.
Шаг 1
Символы с наименьшей частотой встречаемости: п, д, и
Объединяем их в вершину с суммарной частотой 3:
(п, д, и)
/
п (д, и)
/
д, и
Шаг 2
Символы с наименьшей частотой встречаемости: в, у
Объединяем их в вершину с суммарной частотой 4:
(в, у)
/
в у
Шаг 3
Символы с наименьшей частотой встречаемости: е, а
Объединяем их в вершину с суммарной частотой 6:
(е, а)
/
е а
Шаг 4
Символы с наименьшей частотой встречаемости: п, д, и | в, у
Объединяем их в вершину с суммарной частотой 7:
(п, д, и)
/
(в, у) (е, а)
/ /
в у е а
Шаг 5
Символы с наименьшей частотой встречаемости: р, л, а | в, у
Объединяем их в вершину с суммарной частотой 9:
(р, л, а)
/
(в, у) (п, д, и | е, а)
/ /
в у (п, д, и) (е, а)
/ /
п (д, и) а
/
д, и
Шаг 6
Осталось объединить остальные символы:
(к, о, р, л, а)
/
(в, у) (п, д, и | е, а)
/ /
в у (п, д, и) (е, а)
/ /
п (д, и) е а
/
д, и
Кодирование символов
Кодирование символов происходит следующим образом:
- к — 00
- о — 01
- р — 100
- л — 101
- е — 1100
- а — 1101
- в — 1110
- у — 1111
- п — 10000
- д — 10001
- и — 10010
- к — 10011
Таким образом, для заданной фразы «королева кавалеру подарила каравеллу» получаем следующие коды символов:
к — 00, о — 01, р — 100, л — 101, е — 1100, а — 1101, в — 1110, у — 1111, п — 10000, д — 10001, и — 10010
Заключение
Алгоритм Хаффмана позволяет эффективно сжимать данные, используя оптимальное кодирование символов. Построение дерева Хаффмана и кодирование символов требует определенных шагов, но в итоге позволяет сократить объем информации и повысить скорость передачи данных.