Как всё начиналось
В 1996 году, во время учёбы в военном институте по специальности «программирование», на занятиях по кодированию данных мне пришла идея. Что если построить бинарное преобразование по правилу:
|
Вход |
Выход |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
Принцип был прост: строить граф всех возможных вариантов распаковки, дописывать номер правильного варианта к сжатой цепочке — и жать дальше, рекурсивно. Проверить теорию на практике тогда не удалось: в распоряжении был i386, и даже на Assembler вычислительная стоимость делала эксперимент нереальным.
Первое публичное выступление
В 2006 году я случайно встретил своего преподавателя — человека, которому когда-то помогал делать расчёты для публикации в немецком научном журнале. Он предложил выступить от их института на международной конференции по математике и информационным технологиям в СПбГУ. Я выбрал именно этот алгоритм. Идея была принята с интересом, хотя практической реализации тогда всё ещё не существовало.
В последующие годы я периодически возвращался к алгоритму. Получались неплохие результаты, но мучительно медленные и ресурсозатратные. Идея отправилась «на полку» — до эры квантовых вычислений.
Неожиданный путь через физику
Параллельно я занялся другой задачей: попытался рассчитать происхождение Вселенной из ничего. Исходная гипотеза строилась на том, что с каждым новым измерением объём сокращается — и при бесконечном числе измерений всё коллапсирует в точку, из которой «вектор времени» порождает новую Вселенную.
Расчёты привели к неожиданным результатам — они сложились в теорию NVG (Новое Вакуумное Гравитационное поле), проверяемую более чем 50 независимыми расчётами. Исследуя её, я нашёл способ собрать оптическое устройство для экспериментальной проверки. На этом устройстве удалось провести более 80 опытов, реализовать квантовые операции и LLM-инференс — а главное, воплотить алгоритм сжатия 1996 года как аналоговый оптический процесс, который затем был переложен в код: сначала на Go, затем на Rust. github
Bounce: архитектура кодека
Bounce — быстрый архиватор без внешних зависимостей, написанный на чистом Rust. Физическая метафора здесь не украшение, а буквальная архитектурная аналогия: lib
|
Физика NVG |
Кодек Bounce |
|---|---|
|
Коллапс Вселенной к ρ_c |
Сжатие данных до критического порога энтропии |
|
Критическая плотность (золотое сечение) |
Оптимальный размер блока через φ = 1.618 |
|
Отскок (bounce) |
Мгновенная декомпрессия до оригинала |
|
Информация сквозь цикл |
Lossless CRC-32 верификация каждого блока |
Формат файла .bnc
Каждый архив состоит из трёх уровней:
-
Глобальный заголовок — версия, флаги, число файлов
-
Записи файлов — имя, размер, CRC-32, выбранная стратегия кодирования
-
Блоки данных — независимые, параллельно обрабатываемые чанки
Независимость блоков — ключевое архитектурное решение: декомпрессия любого блока не требует декодирования предыдущих. Это открывает многопоточный параллелизм без синхронизации. reddit
Smart Routing: умный выбор стратегии
Прежде чем сжимать, Bounce анализирует файл — вычисляет энтропию Шеннона, битовую плотность и паттерны периодичности, после чего автоматически выбирает оптимальный метод. lib
LZ77 — текст и исходный код
Классический алгоритм скользящего окна для данных с низкой энтропией: исходный код, JSON, XML, логи.
Byte-Shuffle — веса нейросетей (float32/float16)
Самая оригинальная стратегия. Файлы весов (.safetensors, .gguf, .pt) содержат миллиарды чисел в формате IEEE-754. Каждый float32 устроен так:
-
1 бит знака
-
8 бит экспоненты
-
23 бита мантиссы
Идея: переставить байты по их позиции в IEEE-754, собрав все байты знака вместе, все байты экспоненты вместе и т.д. После shuffle байты одного «типа» становятся статистически однородными, и последующее LZ77/Huffman-сжатие работает значительно эффективнее: reddit
До: [s|exp|mantissa] [s|exp|mantissa] [s|exp|mantissa] ...После: [s s s s ...] [exp exp exp ...] [mantissa mantissa ...]
Huffman — смешанные бинарные данные
Применяется к файлам со средней энтропией (3–6 бит/символ), где LZ77 уже неэффективен, а float32-структуры нет.
Raw Store — уже сжатые данные
Если файл определяется как уже сжатый (JPEG, MP4, ZIP), Bounce не тратит CPU на повторное сжатие и сохраняет байты «как есть» — принципиальное отличие от архиваторов, которые слепо жмут всё подряд. lib
Бенчмарки: реальные числа
450 МБ файл весов нейросети .safetensors (Apple M4)
|
Инструмент |
Сжатый размер |
Ratio |
Скорость декомпрессии |
|---|---|---|---|
|
bounce |
339.3 МБ |
71.9% |
~1.3 ГБ/с |
|
gzip -9 |
374.3 МБ |
79.3% |
352.9 МБ/с |
|
lz4 -9 |
468.9 МБ |
99.3% |
2044.8 МБ/с |
|
zstd -3 |
351.5 МБ |
78.1% |
808.0 МБ/с |
|
zstd -19 |
359.4 МБ |
76.2% |
383.5 МБ/с |
|
brotli -q5 |
368.6 МБ |
78.1% |
217.8 МБ/с |
Bounce даёт лучший ratio при декомпрессии в 3.5× быстрее zstd -3 и в 3.7× быстрее gzip. reddit
Использование памяти
Пиковое потребление RAM при работе с 450 МБ файлом — 73.6 МБ. Это достигается блочной потоковой обработкой: в памяти никогда не держится весь файл целиком. reddit
Многопоточный pipeline
Большие файлы разбиваются на независимые блоки. Bounce запускает асинхронный конвейер:
[Поток I/O] читает блок N+1 с диска[CPU пул] декомпрессирует/сжимает блок N[Поток записи] пишет блок N-1 на диск
SSD и процессор работают одновременно без простоев. Число потоков определяется автоматически по num_cpus и настраивается через -j N.
Золотое сечение в размере блоков
Базовый размер блока выбирается через золотое сечение φ = 1.618…:
где k — уровень компрессии (0–9). Каждый следующий уровень увеличивает блок примерно на 61.8%, что соответствует оптимуму по соотношению «глубина поиска совпадений vs накладные расходы на заголовки». lib
Установка и использование
Через Cargo
cargo install nvg-bounce
Готовые бинарники
Доступны для macOS (M1–M4), Linux (x86_64, ARM64) и Windows (x86_64) на GitHub Releases. lib
Базовые команды
# Сжать файлыbounce c archive.bnc model.safetensors weights/# Распаковатьbounce x archive.bnc -o output/# Проверить целостность (без распаковки)bounce t archive.bnc# Список содержимогоbounce l archive.bnc# Параллелизм (8 потоков)bounce c archive.bnc -j 8 large_model/# Уровень сжатия (0 = быстро, 9 = максимум)bounce c archive.bnc --level 6 model.safetensors
Практический пример: архивирование LLM
# Модель 7B в формате GGUF (~4 ГБ)bounce c model-7b.bnc model-7b-q4.gguf# → 2.95 ГБ (71.9%) за 3.2 сек | декомпрессия 1.28 ГБ/с# Директория с несколькими форматамиbounce c models.bnc models/ -j 16
Типичные сценарии
CI/CD кэш для ML-моделей. В пайплайнах обучения нейросетей Bounce сжимает .safetensors и .ckpt лучше любого универсального архиватора при скорости, не уступающей сетевой полосе.
Смешанные датасеты. Smart Routing автоматически применяет LZ77 к текстовым файлам, Byte-Shuffle к тензорам и Raw Store к JPEG — без ручной настройки.
Edge-деплой LLM. При деплое на устройства с ограниченным хранилищем (Raspberry Pi, Jetson, мобильные) Bounce экономит ~28% места без потери скорости загрузки. lib
Патент и лицензия
Механизм динамической маршрутизации сжатия (Signal Reconstruction Resonance) зарегистрирован как патентная заявка USA 19/452,440 (19 января 2026 года). Архиватор распространяется под лицензией Apache License 2.0 — свободно для коммерческого и некоммерческого использования. lib
Ответ на вопрос 1996 года
В 1996 году вопрос был: «существует ли предел сжатия?»
Ответ, найденный спустя 30 лет: да — и его диктует физика, а не математика. Критическая плотность вакуума МэВ/фм³— физический «пол», ниже которого информация не может быть упакована без разрушения. В момент достижения этого предела происходит не коллапс, а отскок.
Ссылки
-
GitHub — bounce: https://github.com/infosave2007/bounce lib
-
GitHub — VMF/NVG теория: https://github.com/infosave2007/vmf github
-
Патентная заявка: USA 19/452,440 (январь 2026)
ссылка на оригинал статьи https://habr.com/ru/articles/1046081/