Алгоритм Хаффмана работает следующим образом:
- На входе получает таблицу частотностей символов в сообщении. 35
- На основании этой таблицы строится дерево кодирования Хаффмана (Н-дерево). 35 Символы входного алфавита образуют список свободных узлов. 3 Каждый лист имеет вес, который может быть равен либо вероятности, либо количеству вхождений символа в сжимаемое сообщение. 3
- Выбираются два свободных узла дерева с наименьшими весами. 35 Создаётся их родитель с весом, равным их суммарному весу. 3 После этого шага родитель рассматривается как свободный узел. 1
- Родитель добавляется в список свободных узлов, а двое его детей удаляются из этого списка. 3
- Одной дуге, выходящей из родителя, ставится в соответствие бит 1, другой — бит 0. 3
- Шаги, начиная со второго, повторяются до тех пор, пока в списке свободных узлов не останется только один свободный узел. 3 Он и будет считаться корнем дерева. 3
Чтобы определить код для каждого из символов, входящих в сообщение, нужно пройти путь от листа дерева, соответствующего текущему символу, до его корня, накапливая биты при перемещении по ветвям дерева. 3