24 декабря 2023 г. Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна.
Подробности случившегося. Мы призываем всех неравнодушных
помочь нам с восстановлением утраченного контента!
произвольных натуральных чисел,
и попытаемся выбрать оптимальную и кратчайшую запись этих чисел.
Тема может быть полезна для реализации обратимого "сжатия без потерь" - несжимаемых данных,
но инфа о разложении чисел - разбросана по сети, фрагментами.
Давайте же стянем её сюда, и переварим.
Итак, начну...
На данный момент, оптимальнейшим способом записи произвольного натурального числа,
является ничто иное как запись его в виде двоичном виде - в виде бит.
Число можно разложить на степени двойки,
можно факторизовать число и разложить на простые множители,
можно разложить на сумму трех квадратов (исключив числа определённого вида): https://ru.wikipedia.org/wiki/Теорема_Лагранжа_о_сумме_четырёх_квадратов
можно также разложить на сумму двух-трех простых чисел: https://ru.wikipedia.org/wiki/Проблема_Гольдбаха
Как ещё можно разложить произвольное натуральное число?
Как можно было бы сжать зеттабайт несжимаемых данных (случайных, зашифрованных)?
Пока, наилучшим обратимым преобразованием, которое мне удалось найти является "Преобразование Барроуза-Уилера".
Оно снижает информационную энтропию данных, позволяя их сжать:
https://ru.wikipedia.org/wiki/Преобразование_Барроуза_—_Уилера
Однако, файл данных, состоящий из 256 байт, содержащий все комбинации этих байт,
сжался в 422 байта программой bzip2.
Очевидно, что сжать последовательно идущие байты, можно было бы - вот так: 00-FF, указав диапазон их.
Чтобы не писать все эти байты.
При этом, строка занимает - всего 5 символов, включая символ-разделитель '-';
Также, любое натуральное число можно представить в виде суммы нескольких последовательных натуральных чисел.
Например, число 25 можно представить в виде суммы из одного (25), двух (12+13) и пяти чисел (3+4+5+6+7).
Поэтому, можно было бы указать стартовое число, и количество членов длиннейшей последовательности...
Ещё одной идеей, было следующее:
взять целый сектор, скажем 512 байт, каким-то невъебенным образом,
разложить его на сумму двух-трех простых чисел,
согласно бинарной и тернарной проблеме Гольдбаха,
затем записать эти простые числа в виде коротком, как на primeGrid: http://primegrid.com/primes/mega_primes.php
И действительно, к чему писать 9,383,761 (decimal digits), если можно просто записать число - так: 10223×2^31172165+1 ???
Осталось только надыбать/создать/воссоздать - алгоритмы!