Алгоритм Хаффмана - самый простой и понятный алгоритм сжатия данных.
Представим, что у нас есть строка:
aaaaebbbaccaddae
Для того, чтобы сжать эту строку без потерь, нам нужно каждому символу присвоить некий код. Но делать мы это будем не просто так, а начнем с самого частого символа, то есть с a, и будем следовать 2м простым правилам:
Получится что-то типа такого:
a - 0
b - 100
c - 101
d - 110
e - 111
Теперь мы можем однозначно кодировать и декодировать строку:
0|0|0|0|111|100|100|100|0|101|101|0|110|110|0|111
Это алгоритм базового кодирования переменной длины.
А теперь что же предлагает нам алгоритм Хаффмана?
Предлагает построить нам бинарное дерево, где слева будут ноды с "0", а справа - с "1".
Принцип построение будет следующий:
Получится примерно следующее:
Кодирование Хаффмана было изобретено очень давно, но используется до сих пор в алгоритмах кодирования.