Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Есть идея по уменьшению информационной энтропии #1

Open
username1565 opened this issue May 14, 2022 · 3 comments

Comments

@username1565
Copy link
Owner

username1565 commented May 14, 2022

Несжимаемые данные нельзя сжать, потому что распределение бит внутри них одинаково.

Возьмём все комбинации бит определённой длины,
и посчитаем число единичных бит и нулевых бит в этих комбинациях.
Большинство комбинаций выдадут 50% / 50% - это и есть несжимаемые данные.

Если комбинация содержит больше 50% единиц и меньше 50% нулей,
то можно сделать негацию и дописав бит - получить комбинацию где нулей больше 50% и единиц меньше 50%.

Такие данные уже можно сжать тем же префиксным кодом, например адаптивным алгоритмом Хаффмана.

К несжимаемым данным, применение негации - бессмысленно.

Задача уменьшения информационной энтропии несжимаемых данных, для сжатия без потерь - состоит в том, чтобы попытаться превратить несжимаемые данные - в сжимаемые.

Сразу подкину идею.

  1. Бьём данные на части, скажем по 512 бит.
  2. Генерируем случайно 32-битное значение, скажем CRC-32 - сумму.
  3. Считаем sha512-хэш от него.
  4. Пытаемся поXOR'ить каждый блок несжимаемых данных с подсчётом числа единиц и нулей.
  5. Если несжимаемые данные превратились в сжимаемые, и число единиц и нулей не одинаково,
    то пишем CRC-32 сумму первыми 4-мя байтами, и фрагмент сжимаемых данных, длиной 512 бит.
  6. После чего - сжимаем.
  7. Если несжимаемые данные остались несжимаемыми при всех возможных комбинациях CRC-32 - пишем 4 нулевых байта и оставляем их как есть.

До алгоритма руки не доходят, но идею оставлю, для кодеров и тестеров.

@username1565
Copy link
Owner Author

Если сгенерировать
все возможные комбинации,
4-х битных, 8-ми битных значений,
и подсчитать число единичных и нулевых бит в них,
то можно видеть, что бОльшая часть содержит одинаковое число единичных и нулевых бит.
Это и есть несжимаемые данные.
Они находятся где-то в центре диапазона всех возможных значений, и их большинство.
Тоже самое справедливо для 16-ти битных значений, 32-битных, 64-битных, 128-битных, и так далее (удвоение битности), 8192-битных скажем.

Так вот, исходя из этого,
можно немного модифицировать вышеописанный алго.

  1. Берём фрагмент несжимаемых данных.
  2. Бьём его на блоки 512 бит, скажем. Калькулятор больших чисел показывает, что 2^512 = 13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084096 - вот столько комбинаций всех 512-битных значений.
  3. Случайно генерировать будем 32-битное число. 2^32 = 4294967296 - столько комбинаций 32-битных чисел.
  4. Делим 13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084096 / 4294967296 = 3121748550315992231381597229793166305748598142664971150859156959625371738819765620120306103063491971159826931121406622895447975679288285306290176.
  5. Теперь, берём одно из 512-ти битное значение - это большое число. Данные в нём могут быть как сжимаемые, так и несжимаемые.
  6. Считаем число единиц и нулей в нём.
  7. Если данные несжимаемые, отнимаем от него 3121748550315992231381597229793166305748598142664971150859156959625371738819765620120306103063491971159826931121406622895447975679288285306290176
  8. Проверяем результат на несжимаемость.
  9. Повторяем до тех пор, пока не получим максимально-сжимаемые данные.
  10. Число раз повтора - это некое число X от 0 до 4294967296 - это 32-битное число, как очевидно из текста выше.
  11. Пишем это число, и фрагмент данных, содержащий максимально-сжимаемые данные.
  12. Сжимаем всё это.
  13. И так - много раз.

Числа 512 и 32 - взяты от балды, чтобы примерно показать принцип этого алго. Разумеется, они могут и должны бы быть оптимальными.

@username1565
Copy link
Owner Author

Я вот думаю насчет уменьшения информационной энтропии, для сжатия несжимаемых данных.
Сжатие без потерь - упирается в наличие в архивах - несжимаемых данных,
которые уже невозможно сжать.
Несжимаемые данные - это данные с максимально-возможной информационной энтропией - то есть одинаковым распределением единичных и нулевых бит.
Если сделать негацию таких данных, информационная энтропия у них сохраняется.
Если сделать негацию данных, где много единиц и мало нулей - то можно получить фрагмент данных где много нулей и мало единиц, дописав один бит (была негация или не было).
А такие данные уже можно сжать каким-нибудь префиксным кодом, скажем.
Несжимаемым же данным - пофигу на негацию, у них биномиальное распределение бит.
ИЧСХ, их большинство, среди всех возможных комбинаций определённой битовой длины.
Так вот, глядя на само распределение несжимаемых данных во всех возможных комбинациях двоичных значений определённой длины
(да, я подсчитывал число единц и число нулей в комбинациях всех 8-ми битных значений, скажем),
глядя на это распределение - у меня появилась эта идея.
Я пока не пришёл к конкретному алгоритму, это просто сырая идея, в виде наброска.
Но думая об этом, в контексте развёртки Вселенной из планковской эпохи,
мне кажется, что если существует некий алгоритм,
позволяющий сжимать несжимаемые данные, и сворачивать инфу,
то возможно, обратной операцией развёртки инфы,
можно было бы получить любую инфу из определённого фрагмента данных.
Возможно даже сгенерировать высокоточную модель объективной реальности,
из какого-либо значения, имея подобный алгоритм-генератор инфы.
Мне кажется, нечто подобное, могло происходить при Большом Взрыве, но это не точно.
А если так, то можемповторить.

Я думаю это годная тема для исследования, даже если она
не приведёт к модели высокоточной - она могла бы дать возможность сжимать Big Data, и расжимать.

@username1565
Copy link
Owner Author

username1565 commented May 17, 2022

Хренушки. Вышеописанный метод не снижает энтропию данных. Проверил.
Нашёл статью на хабре https://habr.com/ru/post/525664/
Цитата:


Мной придуман алгоритм, основанный на простом рассуждении – если файл условно несжимаемый,
есть вероятность что, часть файла имеет избыточность и файл можно сжать частично.

Идея, теперь - следующая.
Подсчётом единиц и нулей, найти длиннейший фрагмент, содержащий наибольшее число единичных бит,
затем сделать негацию этого фрагмента, и записать одно лишь смещение - плюс данные все эти, сместе с фрагментом, где много нулей.
Ну а дальше - пожать.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant