Архиватор рождённый из теории предельного сжатия вселенной

от автора

Как всё начиналось

В 1996 году, во время учёбы в военном институте по специальности «программирование», на занятиях по кодированию данных мне пришла идея. Что если построить бинарное преобразование по правилу:

Вход

Выход

00

0

01

1

10

01

11

10

Принцип был прост: строить граф всех возможных вариантов распаковки, дописывать номер правильного варианта к сжатой цепочке — и жать дальше, рекурсивно. Проверить теорию на практике тогда не удалось: в распоряжении был 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…:

\text{block\_size} = \lfloor \text{base} \times \varphi^k \rfloor

где 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 лет: да — и его диктует физика, а не математика. Критическая плотность вакуума \rho_c = 7.09 \times 10^4 МэВ/фм³— физический «пол», ниже которого информация не может быть упакована без разрушения. В момент достижения этого предела происходит не коллапс, а отскок.


Ссылки

ссылка на оригинал статьи https://habr.com/ru/articles/1046081/