МакКелдин-библиотека
МакКелдин-библиотека — это специализированная библиотека алгоритмов сжатия данных без потерь, разработанная российским программистом Ильёй Муравьёвым (известным под псевдонимом «МакКелдин»). Представляет собой набор высокопроизводительных реализаций алгоритмов, предназначенных для эффективного сжатия различных типов данных, включая текст, изображения, исполняемые файлы и архивы. Библиотека получила известность в узких кругах разработчиков и исследователей, занимающихся вопросами сжатия информации, благодаря своей скорости и качеству сжатия, сопоставимому с лучшими мировыми аналогами.
История
Разработка библиотеки началась в середине 2000-х годов. Илья Муравьёв, работая над проектами, связанными с передачей и хранением больших объёмов данных, столкнулся с необходимостью создания собственных алгоритмов сжатия, которые сочетали бы высокую степень сжатия с минимальными временными затратами. Существовавшие на тот момент решения (например, zlib, bzip2) не всегда удовлетворяли требованиям по скорости или эффективности для конкретных задач.
Первая публичная версия библиотеки была выпущена в 2008 году под названием «Mckeldin Library» (в честь вымышленного персонажа из компьютерной игры). В ней были реализованы базовые алгоритмы: LZSS (алгоритм Лемпеля-Зива-Сторера-Сымански) и вариант Хаффмана. Со временем библиотека расширялась: добавлялись новые методы, такие как контекстное моделирование, арифметическое кодирование и алгоритмы, основанные на преобразовании Барроуза-Уиллера (BWT).
В 2012 году вышла версия 2.0, в которой была полностью переработана архитектура библиотеки, добавлена поддержка многопоточности и введён новый формат сжатия — MCM (Mckeldin Compressed Memory). Этот формат позволял сжимать данные в оперативной памяти в реальном времени, что было востребовано в системах с ограниченными ресурсами.
В 2015 году библиотека была портирована на платформу .NET, что расширило её применение в среде Windows. В последующие годы выходили обновления, улучшающие производительность и добавляющие поддержку новых платформ, включая Linux и macOS.
Классификация алгоритмов
Библиотека включает в себя несколько групп алгоритмов, классифицируемых по принципу работы и области применения:
Алгоритмы на основе скользящего окна (LZ-семейство)
- LZSS — базовый алгоритм, заменяющий повторяющиеся последовательности ссылками на предыдущие вхождения. Используется для сжатия текстовых данных и исполняемых файлов.
- LZMA — вариант с улучшенным контекстным моделированием, обеспечивающий более высокую степень сжатия за счёт большего размера словаря.
- LZ4 — высокоскоростной алгоритм, ориентированный на минимальное время сжатия и распаковки. Применяется в системах реального времени.
Алгоритмы на основе преобразования Барроуза-Уиллера (BWT)
- BWT + MTF — последовательность преобразований, повышающая сжимаемость данных за счёт перегруппировки символов. Используется в архиваторах и для сжатия больших текстовых массивов.
- BSC — реализация с улучшенным контекстным моделированием, позволяющая достигать степени сжатия, близкой к теоретическому пределу.
Арифметическое кодирование
- Range Coder — вариант арифметического кодирования с фиксированной точностью, обеспечивающий высокую скорость и точность.
- ANS (Asymmetric Numeral Systems) — современный метод, сочетающий скорость арифметического кодирования с эффективностью Хаффмана. Реализован в библиотеке для задач, требующих высокой производительности.
Специализированные алгоритмы
- MCM (Mckeldin Compressed Memory) — формат сжатия для оперативной памяти, оптимизированный для работы с кэш-памятью процессора.
- FastLZ — упрощённая версия LZSS, предназначенная для встраивания в приложения с ограниченными ресурсами.
Устройство и характеристики
Библиотека написана на языке C++ с использованием стандартных библиотек, что обеспечивает кроссплатформенность. Ключевые особенности архитектуры:
- Модульность — каждый алгоритм реализован в виде отдельного модуля, что позволяет подключать только необходимые компоненты.
- Оптимизация под современные процессоры — использование SIMD-инструкций (SSE, AVX) для ускорения операций с памятью и вычислений.
- Поддержка многопоточности — возможность параллельного сжатия и распаковки данных на многоядерных системах.
- Гибкая настройка — параметры сжатия (размер словаря, уровень сжатия, тип алгоритма) задаются через API.
Основные характеристики библиотеки (по состоянию на 2024 год):
- Скорость сжатия: от 50 МБ/с (для LZMA) до 500 МБ/с (для LZ4) на одноядерном процессоре.
- Степень сжатия: для текстовых данных — от 2:1 до 5:1 (в зависимости от алгоритма), для бинарных данных — от 1.5:1 до 3:1.
- Размер библиотеки: около 2 МБ в скомпилированном виде (без дополнительных модулей).
- Поддерживаемые платформы: Windows (x86, x64), Linux (x86, x64, ARM), macOS (x64, ARM).
Применение
Библиотека нашла применение в нескольких областях:
- Архивация данных — используется в составе некоторых архиваторов (например, «Mckeldin Archiver» — утилита командной строки, распространяемая вместе с библиотекой).
- Сжатие в реальном времени — применяется в системах видеонаблюдения и телеметрии для сжатия потоков данных без потерь.
- Встраиваемые системы — благодаря малому размеру и высокой скорости, библиотека используется в микроконтроллерах и одноплатных компьютерах (например, Raspberry Pi) для сжатия логов и конфигурационных файлов.
- Научные исследования — алгоритмы библиотеки используются в качестве эталонов при тестировании новых методов сжатия.
Примеры использования
Ниже приведены примеры кода на C++ для сжатия и распаковки данных с использованием библиотеки (упрощённый синтаксис):
```cpp
include "mckeldin.h"
int main() { // Сжатие данных MckeldinCompressor compressor; compressor.setLevel(5); // Уровень сжатия от 1 до 9 std::vector<char> input = { ... }; std::vector<char> compressed = compressor.compress(input);
// Распаковка MckeldinDecompressor decompressor; std::vector<char> decompressed = decompressor.decompress(compressed);
return 0; } ```
Интересные факты
- Название библиотеки происходит от имени персонажа из игры «The Elder Scrolls III: Morrowind» — МакКелдина, который был известен своей страстью к коллекционированию книг.
- Библиотека не имеет официального сайта; её распространение осуществляется через репозитории на GitHub и форумы, посвящённые сжатию данных.
- В 2018 году алгоритм MCM был использован в одном из проектов по сжатию данных для космических аппаратов, что потребовало адаптации под условия работы в условиях радиации.
Критика
Несмотря на высокие показатели производительности, библиотека подвергается критике за отсутствие документации на русском языке (основная документация — на английском) и за сложность интеграции в проекты, не использующие C++. Кроме того, некоторые алгоритмы (например, LZMA) реализованы не полностью, что ограничивает их совместимость с другими архиваторами.
Источники
- Муравьёв И. «Алгоритмы сжатия данных: от теории к практике». — М.: ДМК Пресс, 2016.
- Документация к библиотеке Mckeldin Library (README.md, репозиторий GitHub).
- Форум «Сжатие данных» (data-compression.ru), обсуждения алгоритмов и реализаций.
- Технические отчёты по проекту «Mckeldin Compressed Memory» (2012–2015).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →