Алгоритм Хаффмана для n ичной системы счисления
Алгоритм
Для построения -ичного кода Хаффмана надо использовать операцию сжатия алфавита, при которой каждый раз сливаются не две, а букв исходного алфавита, имеющих наименьшие вероятности.Сжатие алфавита, при котором букв заменяются на одну, приводит к уменьшению числа букв на ; так как для построения -ичного кода, очевидно, требуется, чтобы последовательность сжатий в конце концов привела нас к алфавиту из букв (сопоставляемых сигналам кода), то необходимо, чтобы число букв первоначального алфавита было представимо в виде ),. Этого, однако, всегда можно добиться, добавив, если нужно, к первоначальному алфавиту еще несколько фиктивных букв, вероятности которых считаются равными нулю. После этого построение -ичного кода Хаффмана и доказательство его оптимальности (среди всех -ичных кодов) проводятся уже точно так же, как и случае двоичного кода.
Пример
Возьмем какое-то слово,состоящее из букв: а, б, в, г, д, е , а набор весов :
| Узел | и | м | п | с |
|---|---|---|---|---|
| Вес | 4 | 1 | 1 | 3 |
По алгоритму возьмем два символа с наименьшей частотой — это м и п. Сформируем из них новый узел мп весом 2 и добавим его к списку узлов:
| Узел | и | мп | с |
|---|---|---|---|
| Вес | 4 | 2 | 3 |
Затем объединим в один узел узлы мп и c:
| Узел | и | мпс |
|---|---|---|
| Вес | 4 | 5 |
И, наконец, объединяем два узла и и мпс. Итак, мы получили дерево Хаффмана и соответствующую ему таблицу кодов:
| Символ | и | м | п | с |
|---|---|---|---|---|
| Код | 0 | 100 | 101 | 11 |