Введение
Трансформация «перемещение в начало» (MTF) — это кодирование данных (обычно потока байтов), разработанное для повышения эффективности методов энтропийного кодирования при сжатии. При эффективной реализации она достаточно быстра, чтобы её преимущества обычно оправдывали включение в качестве дополнительного этапа в алгоритм сжатия данных. Этот алгоритм был впервые опубликован Борисом Рябко под названием «книжная стопка» в 1980 году. Позднее он был повторно открыт Дж. К. Бентли и др. в 1986 году, что подтверждается в пояснении.
Реализация
Детали реализации важны для производительности, особенно для декодирования. Для кодирования использование связанного списка не даёт явного преимущества, поэтому допустимо использовать массив для хранения списка, при этом наихудшая производительность составит O(nk), где n — длина кодируемых данных, а k — количество значений (обычно константа для конкретной реализации). Типичная производительность выше, поскольку часто используемые символы с большей вероятностью будут находиться в начале списка и обеспечат более быстрые совпадения. В этом также заключается идея самоорганизующегося списка "Переместить в начало". Однако для декодирования можно использовать специализированные структуры данных, чтобы значительно повысить производительность.
Использование в практических алгоритмах сжатия данных
Трансформация MTF использует локальную корреляцию частот для снижения энтропии сообщения. Действительно, недавно использовавшиеся символы остаются в начале списка; если использование символов демонстрирует локальную корреляцию, это приведет к большому количеству малых чисел, таких как "0" и "1", в выходных данных. Однако не все данные обладают таким типом локальной корреляции, и для некоторых сообщений трансформация MTF может даже увеличить энтропию. Важное применение трансформации MTF – сжатие на основе преобразования Бёрроуза-Уиллера. Преобразование Бёрроуза-Уиллера эффективно генерирует последовательность, демонстрирующую локальную частотную корреляцию для текста и некоторых других специальных классов данных. Сжатие значительно выигрывает от применения трансформации MTF после преобразования Бёрроуза-Уиллера, перед окончательным этапом энтропийного кодирования.
Пример
В качестве примера, представьте, что мы хотим сжать монолог Гамлета ("Быть или не быть"). Мы можем вычислить размер этого сообщения как 7033 бита. Наивно, мы могли бы попытаться применить преобразование MTF напрямую. В результате получится сообщение объемом 7807 бит (больше, чем исходный). Причина в том, что английский текст в целом не демонстрирует высокой локальной частотной корреляции. Однако, если сначала применить преобразование Бёрроуза — Уилера, а затем преобразование MTF, мы получим сообщение объемом 6187 бит. Обратите внимание, что преобразование Бёрроуза — Уилера не уменьшает энтропию сообщения; оно лишь переупорядочивает байты таким образом, чтобы преобразование MTF стало более эффективным. Одна из проблем базового преобразования MTF заключается в том, что оно вносит одинаковые изменения для любого символа, независимо от его частоты, что может привести к снижению степени сжатия, поскольку редко встречающиеся символы могут вытеснять часто встречающиеся символы на более высокие позиции. По этой причине были разработаны различные модификации и альтернативы. Одно из распространенных изменений заключается в ограничении перемещения символов, превышающих определенное значение, до определенного порога. Другой подход — разработать алгоритм, который подсчитывает локальную частоту каждого символа и использует эти значения для определения порядка символов в любой момент времени. Многие из этих преобразований по-прежнему резервируют ноль для повторяющихся символов, поскольку они часто являются наиболее распространенными в данных после преобразования Бёрроуза — Уилера.
Перемещение вперед ссылки
Термин Move To Front (MTF) также используется в несколько ином контексте, как тип динамически связанного списка. В списке MTF каждый элемент перемещается в начало при обращении к нему. Это обеспечивает со временем более быстрый доступ к наиболее часто используемым элементам.