Метод кодирования по дереву Фано (алгоритм Шеннона — Фано) работает следующим образом: 1
- Символы первичного алфавита выписывают по убыванию вероятностей. 1
- Символы полученного алфавита делят на две части, суммарные вероятности символов которых максимально близки друг другу. 1
- В префиксном коде для первой части алфавита присваивается двоичная цифра «0», второй части — «1». 1
- Полученные части рекурсивно делятся, и их частям назначаются соответствующие двоичные цифры в префиксном коде. 1
- Когда размер подалфавита становится равен нулю или единице, то дальнейшего удлинения префиксного кода для соответствующих ему символов первичного алфавита не происходит, таким образом, алгоритм присваивает различным символам префиксные коды разной длины. 1
Основные принципы построения дерева Фано: 2
- Начало построения. 2 Дерево начинается с вершины, от которой отходят две ветви, поскольку оно является двоичным. 2 Левой ветви, например, присваивается бит 0, а правой — 1. 2
- Разветвление. 2 Каждый узел дерева может порождать две новые ветви. 2 Ветвь, уходящая влево, например, по аналогии обозначается битом 0, а правая — 1. 2
- Заполнение и блокировка ветвей. 2 Если ветвь занята символом, она блокируется и больше не участвует в разветвлениях. 2 Это необходимо для соблюдения уникальности кодов и предотвращения пересечений. 2
- Достроение дерева. 2 После размещения символов с известными кодами дерево достраивается для кодирования остальных букв. 2 Новые ветви продолжают следовать принципу двоичного разветвления: например, 0 — для левого направления и 1 — для правого. 2
Задача кодирования считается решённой, когда на всех ветвях кодового бинарного дерева образуются листья. 4