- BrainTools - https://www.braintools.ru -
В 1996 году, во время учёбы в военном институте по специальности «программирование», на занятиях по кодированию данных мне пришла идея. Что если построить бинарное преобразование по правилу:
|
Вход |
Выход |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
Принцип был прост: строить граф всех возможных вариантов распаковки, дописывать номер правильного варианта к сжатой цепочке — и жать дальше, рекурсивно. Проверить теорию на практике тогда не удалось: в распоряжении был i386, и даже на Assembler вычислительная стоимость делала эксперимент нереальным.
В 2006 году я случайно встретил своего преподавателя — человека, которому когда-то помогал делать расчёты для публикации в немецком научном журнале. Он предложил выступить от их института на международной конференции по математике [1] и информационным технологиям в СПбГУ. Я выбрал именно этот алгоритм. Идея была принята с интересом [2], хотя практической реализации тогда всё ещё не существовало.
В последующие годы я периодически возвращался к алгоритму. Получались неплохие результаты, но мучительно медленные и ресурсозатратные. Идея отправилась «на полку» — до эры квантовых вычислений.
Параллельно я занялся другой задачей: попытался рассчитать происхождение Вселенной из ничего. Исходная гипотеза строилась на том, что с каждым новым измерением объём сокращается — и при бесконечном числе измерений всё коллапсирует в точку, из которой «вектор времени» порождает новую Вселенную.
Расчёты привели к неожиданным результатам — они сложились в теорию NVG (Новое Вакуумное Гравитационное поле), проверяемую более чем 50 независимыми расчётами. Исследуя её, я нашёл способ собрать оптическое устройство для экспериментальной проверки. На этом устройстве удалось провести более 80 опытов, реализовать квантовые операции и LLM-инференс — а главное, воплотить алгоритм сжатия 1996 года как аналоговый оптический процесс, который затем был переложен в код: сначала на Go, затем на Rust. github [3]
Bounce — быстрый архиватор без внешних зависимостей, написанный на чистом Rust. Физическая метафора здесь не украшение, а буквальная архитектурная аналогия: lib [4]
|
Физика NVG |
Кодек Bounce |
|---|---|
|
Коллапс Вселенной к ρ_c |
Сжатие данных до критического порога энтропии |
|
Критическая плотность (золотое сечение) |
Оптимальный размер блока через φ = 1.618 |
|
Отскок (bounce) |
Мгновенная декомпрессия до оригинала |
|
Информация сквозь цикл |
Lossless CRC-32 верификация каждого блока |
Каждый архив состоит из трёх уровней:
Глобальный заголовок — версия, флаги, число файлов
Записи файлов — имя, размер, CRC-32, выбранная стратегия кодирования
Блоки данных — независимые, параллельно обрабатываемые чанки
Независимость блоков — ключевое архитектурное решение: декомпрессия любого блока не требует декодирования предыдущих. Это открывает многопоточный параллелизм без синхронизации. reddit [5]
Прежде чем сжимать, Bounce анализирует файл — вычисляет энтропию Шеннона, битовую плотность и паттерны периодичности, после чего автоматически выбирает оптимальный метод. lib [4]
Классический алгоритм скользящего окна для данных с низкой энтропией: исходный код, JSON, XML, логи.
Самая оригинальная стратегия. Файлы весов (.safetensors, .gguf, .pt) содержат миллиарды чисел в формате IEEE-754. Каждый float32 устроен так:
1 бит знака
8 бит экспоненты
23 бита мантиссы
Идея: переставить байты по их позиции в IEEE-754, собрав все байты знака вместе, все байты экспоненты вместе и т.д. После shuffle байты одного «типа» становятся статистически однородными, и последующее LZ77/Huffman-сжатие работает значительно эффективнее: reddit [5]
До: [s|exp|mantissa] [s|exp|mantissa] [s|exp|mantissa] ...
После: [s s s s ...] [exp exp exp ...] [mantissa mantissa ...]
Применяется к файлам со средней энтропией (3–6 бит/символ), где LZ77 уже неэффективен, а float32-структуры нет.
Если файл определяется как уже сжатый (JPEG, MP4, ZIP), Bounce не тратит CPU на повторное сжатие и сохраняет байты «как есть» — принципиальное отличие от архиваторов, которые слепо жмут всё подряд. lib [4]
|
Инструмент |
Сжатый размер |
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 [5]
Пиковое потребление RAM при работе с 450 МБ файлом — 73.6 МБ. Это достигается блочной потоковой обработкой: в памяти [6] никогда не держится весь файл целиком. reddit [5]
Большие файлы разбиваются на независимые блоки. Bounce запускает асинхронный конвейер:
[Поток I/O] читает блок N+1 с диска
[CPU пул] декомпрессирует/сжимает блок N
[Поток записи] пишет блок N-1 на диск
SSD и процессор работают одновременно без простоев. Число потоков определяется автоматически по num_cpus и настраивается через -j N.
Базовый размер блока выбирается через золотое сечение φ = 1.618…:
где k — уровень компрессии (0–9). Каждый следующий уровень увеличивает блок примерно на 61.8%, что соответствует оптимуму по соотношению «глубина поиска совпадений vs накладные расходы на заголовки». lib [4]
cargo install nvg-bounce
Доступны для macOS (M1–M4), Linux (x86_64, ARM64) и Windows (x86_64) на GitHub Releases [7]. lib [4]
# Сжать файлы
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
# Модель 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-моделей. В пайплайнах обучения [8] нейросетей Bounce сжимает .safetensors и .ckpt лучше любого универсального архиватора при скорости, не уступающей сетевой полосе.
Смешанные датасеты. Smart Routing автоматически применяет LZ77 к текстовым файлам, Byte-Shuffle к тензорам и Raw Store к JPEG — без ручной настройки.
Edge-деплой LLM. При деплое на устройства с ограниченным хранилищем (Raspberry Pi, Jetson, мобильные) Bounce экономит ~28% места без потери скорости загрузки. lib [4]
Механизм динамической маршрутизации сжатия (Signal Reconstruction Resonance) зарегистрирован как патентная заявка USA 19/452,440 (19 января 2026 года). Архиватор распространяется под лицензией Apache License 2.0 — свободно для коммерческого и некоммерческого использования. lib [4]
В 1996 году вопрос был: «существует ли предел сжатия?»
Ответ, найденный спустя 30 лет: да — и его диктует физика, а не математика. Критическая плотность вакуума МэВ/фм³— физический «пол», ниже которого информация не может быть упакована без разрушения. В момент достижения этого предела происходит не коллапс, а отскок.
GitHub — bounce: https://github.com/infosave2007/bounce [3] lib [4]
GitHub — VMF/NVG теория: https://github.com/infosave2007/vmf [9] github [10]
Патентная заявка: USA 19/452,440 (январь 2026)
Автор: infosave
Источник [11]
Сайт-источник BrainTools: https://www.braintools.ru
Путь до страницы источника: https://www.braintools.ru/article/31559
URLs in this post:
[1] математике: http://www.braintools.ru/article/7620
[2] интересом: http://www.braintools.ru/article/4220
[3] github: https://github.com/infosave2007/bounce
[4] lib: https://lib.rs/crates/nvg-bounce
[5] reddit: https://www.reddit.com/r/compression/comments/1u0vexs/i_built_a_rust_archiver_that_compresses/
[6] памяти: http://www.braintools.ru/article/4140
[7] GitHub Releases: https://github.com/infosave2007/bounce/releases
[8] обучения: http://www.braintools.ru/article/5125
[9] https://github.com/infosave2007/vmf: https://github.com/infosave2007/vmf
[10] github: https://github.com/infosave2007
[11] Источник: https://habr.com/ru/articles/1046081/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1046081
Нажмите здесь для печати.