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