Как всё начиналось
В 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)
Инструмент |
Сжатый размер (MiB) |
Ratio |
Скорость декомпрессии |
|---|---|---|---|
bounce |
323.6 MiB |
71.9% |
~1.3 GiB/с |
gzip -9 |
357.0 MiB |
79.3% |
352.9 MiB/с |
lz4 -9 |
446.9 MiB |
99.3% |
2044.8 MiB/с |
zstd -3 |
351.6 MiB |
78.1% |
808.0 MiB/с |
zstd -19 |
342.8 MiB |
76.2% |
383.5 MiB/с |
brotli -q5 |
351.5 MiB |
78.1% |
217.8 MiB/с |
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)
Комментарии (15)

Politura
10.06.2026 14:21Идея с перетасовкой битов у массивов чисел f16/f32 очень клевая, но немного запоздала: сейчас все большую популярность набирают квантованые модели и есть шанс, что это станет повсеместным стандартом.
Например DeepSeek v4 pro хоть и имеет 1.6Т параметров, но бОльшая часть из них изначально - 4-х битные, так что занимает модель 865Гб. Nvidia вовсю продвигает NVFP4 для которого у нее аппаратное ускорение.

infosave Автор
10.06.2026 14:21Я занимаюсь компиляцией LLM под разные типы задач в качестве исходных беру например Qwen3.6 27B или Gemma4 31B для сжатия нужны полные модели, как пример сжатия для задач кодинга посмотрите уже сжатые моим способом модели https://huggingface.co/infosave как раз архиватор пригодился для хранения разных видов моделей!

900k
10.06.2026 14:21Кто шарит? Это просто byte shuffle и выбор оптимальной стратегии сжатии? А причем здесь космос и золотое сечение?

iONHOLM
10.06.2026 14:21Скрытый текст
test.tar - 503 089 664
test-1.bnc - 263 804 231 - 00:08.35
test-1.zst - 223 158 066 - 00:02.39
test-2.bnc - 226 225 233 - 00:11.98
test-2.zst - 214 153 311 - 00:02.79
test-3.bnc - 224 360 941 - 00:15.45
test-3.zst - 207 179 976 - 00:05.04
test-4.bnc - 222 771 439 - 00:27.46
test-4.zst - 204 573 434 - 00:09.48
test-5.bnc - 221 303 182 - 00:54.62
test-5.zst - 199 963 125 - 00:08.43
test-6.bnc - 220 119 423 - 01:35.35
test-6.zst - 198 246 347 - 00:10.23
test-7.bnc - 219 385 531 - 02:56.48
test-7.zst - 197 014 432 - 00:11.95
test-8.bnc - 217 921 549 - 05:37.65
test-8.zst - 196 572 104 - 00:14.23
test-9.bnc - 217 366 242 - 09:21.93
test-9.zst - 195 202 138 - 00:15.82
Тестировать распаковку при такой "шустрой" упаковке, посчитал излишним.

iONHOLM
10.06.2026 14:21А зря вчера не протестировал распаковку, эпичнее бы вышло.
ZSTD -9 справился за 1.53, а bounce...
extracting test.tar: 3.5 / 479.8 MB (0.7%) | 2.9 MB/s | ETA: 02:46 thread ‘’ (1760) panicked at src\codec.rs:2415:72: called
Option::unwrap()on aNonevalue note: run withRUST_BACKTRACE=1environment variable to display a backtraceХороший продукт, надежный как швейцарские часы. Вспомнил прикол из эпохи DOS. Тогда тоже был архиватор который умел паковать, но не всегда умел распаковывать. Правда там чистое мошенничество было. Этот кусок в 2 мб распаковывает, он совпадает с началом иходного.

wataru
10.06.2026 14:21Ну и бред же про физику. Как обычно, у таких "философов": выставили Сложный уровень материала. Патенты. Ну хоть не стали называть это Алгоритмом Кириченко, у вас еще не все потеряно.
Начальная идея про замену 00/01/10/11 на 0/1/01/10 - тоже бред. Код не префиксный. Его однозначно не распаковать. "01" может быть запакованным "10" или "00 01".
Если вводить какие-то хедеры или разметку, то файл раздуется еще больше изначального. Если же делать префиксный код, то будет тупо хаффмановское кодирование в лучшем случае.
Из оставшихся идей в статье есть только две:
1) Выбрать лучший алгоритм кодирования (в том числе не сжимать уже сжатые файлы). Идея старая и тривиальная.
2) Предобработка специфичного бинарного формата из float'ов. Это интересная идея, но физикой никак не навеянная, и практическая польза ее под вопросом.
Вся остальная архивация на чужих стандартных алгоритмах.
Реализация - такая себе. Код надо вылизывать и отлаживать, но не буду придираться.
Manguss
lz4 -9 декомпрессия 2044.8 МБ/с
bounce декомпрессия ~1.3 ГБ/с
Выделенное жирненьким и измерено в другом масштабе, манипуляция цифрами, и по lz4 -9 понятно почему быстро, с учетом уго Ratio.
В остальном прекрасная статья.
infosave Автор
Внимательно посмотрите, что при высокой скорости 2044.8 МБ/с lz4 -9 компрессии почти небыло всего 0.7% поэтому нечего расспаковывать только скопировать и все )
WatchMaster
Раз уж зашла тема про эту строку, в вашей таблице 450 Мб -> 468,9 Мб, а коэффициент 99,3%. Что-то из этого не корректно, в совокупности с изменением размерности скорости действительно вызывает сомнения. Исходя из первой строки первоначальный файл весил 471,9 Мб (а не 450). Мне кажется просто стоит результаты бенчмарка чуть причесать, чтобы прям нельзя было за мелочи зацепиться. Это вполне логично, что заявления о том, что написан код, перфоманс, которого превосходит текущие технологии рассматривают под микроскопом и такие мелочи снижают доверие к результатам опубликованным автором.
infosave Автор
Поправил чтобы все было в единых единицах, чтобы небыло путаницы
Manguss
указал в комменте что с учетом Ratio понятно почему он быстрее, и автор мог сноску, так что Я вполне внимательно посмотрел
900k
Что прекрасного в этом миксе нейрослопа и лжи?