В теории информации энтропийное кодирование (или энтропийное кодирование ) — это любой метод сжатия данных без потерь , который пытается приблизиться к нижней границе, объявленной теоремой Шеннона о кодировании источника , которая гласит, что любой метод сжатия данных без потерь должен иметь ожидаемую длину кода, большую или равную энтропии источника. [1]
Точнее, теорема о кодировании источника утверждает, что для любого распределения источника ожидаемая длина кода удовлетворяет , где — число символов в кодовом слове, — функция кодирования, — число символов, используемых для создания выходных кодов, и — вероятность исходного символа. Энтропийное кодирование пытается приблизиться к этой нижней границе.
Два наиболее распространенных метода энтропийного кодирования — это кодирование Хаффмана и арифметическое кодирование . [2] Если приблизительные характеристики энтропии потока данных известны заранее (особенно для сжатия сигнала ), может быть полезен более простой статический код. Эти статические коды включают универсальные коды (такие как гамма-кодирование Элиаса или кодирование Фибоначчи ) и коды Голомба (такие как унарное кодирование или кодирование Райса ).
С 2014 года компрессоры данных начали использовать семейство методов энтропийного кодирования на основе асимметричных систем счисления , что позволяет сочетать коэффициент сжатия арифметического кодирования со стоимостью обработки, аналогичной кодированию Хаффмана .
Помимо использования энтропийного кодирования как способа сжатия цифровых данных, энтропийный кодер также может использоваться для измерения степени сходства между потоками данных и уже существующими классами данных. Это делается путем создания энтропийного кодера/компрессора для каждого класса данных; неизвестные данные затем классифицируются путем подачи несжатых данных на каждый компрессор и определения того, какой компрессор обеспечивает наибольшее сжатие. Кодер с наилучшим сжатием, вероятно, является кодером, обученным на данных, которые были наиболее похожи на неизвестные данные.