Решаем задачу уровня «Невозможно». Сжатие хаотического бинарного кода. Суперпозиционные системы счисления

2ed0fb07d4466b1000257acb70b84e3b

Для наилучшего восприятия выделим основные пункты изложенного материала:

  1. Для чего необходимо сжатие информации и увеличение плотности записи.

  2. Проблемы в покорение хаоса, нерешенные математиками и ими же созданные.

  3. Простое решение проблемы сжатия абсолютно любого бинарного кода.

  4. Пути и методы дальнейшего развития сжатия бинарного кода.

1. Для чего необходимо сжатие информации и увеличение плотности записи

В современном информационном мире увеличение плотности записи позволит:

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

  2. Увеличить скорость передачи данных за счет ее сжатия, а также открыть возможности получения информации там, где слабые пропускные каналы связи, расширить возможности уже существующих больших каналов связи.

  3. Передавать и получать кратно больше информации устройствами для этого не предназначенными.

  4. Поднять уровень шифрования данных до недосягаемых высот даже при современном уровне математической мысли.

  5. Увеличить точность расчетов ЭВМ за счет:

    • улучшения способов хранения и алгоритмов вычисления чисел с плавающей точкой и в целом дробных чисел;

    • изменение стандартов записи данных в память ЭВМ;

    • разгрузка оперативной памяти ЭВМ при больших вычислениях, что даёт в целом увеличение скорости работы процессоров ЭВМ.

  6. Качественно улучшить работу с большими данными за счет более тонкой настройки алгоритмов и процессов обработки больших данных.

  7. Создать новые протоколы передачи информации (связи), одновременно решающие проблему и с шифрованием, и со скоростью передачи больших данных.

  8. Улучшение алгоритмов работы нейронных сетей за счет решения, которое будет ниже представлено.

2. Проблемы в покорение хаоса, нерешенные математиками и ими же созданные

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

Но мы ерундой заниматься не будем, мы пойдем другим путём. Тем более и задача у нас посложнее — сжать «уже максимально возможно» сжатый двоичный код (бинарный). Математики утверждают, что еще троичный код также является максимально ёмким. А эмпирически доказано, что самая ёмкая запись числа находится в позиционной системе счисления с основанием е = 2,71828 (приблизительно). Но это не про математику целых чисел. Значит выходит, что сжать абсолютно любой двоичный код без потерь не получится?

Это у них не получится, а у нас в России возможно всё. Приступаем к решению задачи сжатия абсолютно любого хаотичного двоичного кода. Который после сжатия снова можно сжать, так как он в ЭВМ будет записан в бинарной системе. И это можно сжимать столько раз, пока не придем к минимально возможным пределам сжатия.

3. Простое решение проблемы сжатия абсолютно любого бинарного кода 

Для решения этой задачи воспользуемся рядом математических приемов и инструментов:

  1. Решением «от противного» («от обратного»).

  2. Асимметрией.

  3. Факториалом и субфакториалом.

  4. Принципом вынесения общего множителя.

  5. Принципом суперпозиции числа в числе.

  6. Созданием суперпозиционной системы счисления.

Как всем уже известно, самая плотная запись точных данных получается в позиционных системах счисления с основаниями 2 или 3. В недостижимом идеале — в системе счисления с основанием иррационального числа е.

Поэтому мы будем использовать суперпозиционную систему счисления для более плотной записи. Не слышали о таких? Я тоже не слышал. Тогда создадим её.

Уйдем от проблем двоичной и троичной систем счисления с общими множителями (порядками) 2 и 3 (решение от обратного) и добавим хаотичности (опять решение от обратного) — то есть воспользуемся асимметрией. Для этого вспомогательной основой нашей системы счисления возьмем факториальную систему счисления. В этой системе счисления в числе всегда участвуют все элементы и всегда без повторов, то есть значение числа определяется конкретной выборкой (или перестановкой) всех элементов системы счисления. Да, такая система счисления уступает в плотности записи позиционной системе счисления с аналогичным основанием, но у нас сейчас задача придать нашему хаотичному ряду чисел определенные свойства, которыми мы сможем легко воспользоваться для более плотной записи.

Далее будем натягивать виртуальную систему счисления с основанием 2,71828 на что-то среднее между двоичным и троичным кодом. В этом нам поможет субфакториал. Это число перестановок неповторяющихся элементов в выборке, при которой все элементы находятся не на своих местах. И отношение факториала числа к собственному субфакториалу удивительным образом стремится как раз к числу е = 2,71828… Но и это не главное. А главное то, что отношение факториала числа 3 к собственному субфакториалу равно 3. И только после факториала числа 3 это отношение меньше 3 и стремиться к 2,718…. С помощью этого конкретного разбиения (по 3 элемента от всей выборки) мы будем укрупненно (не точно по месту) определять есть ли в конкретном блоке от целой выборки элементы по месту (например, 6 находится на позиции 6 или 15 на позиции 15) или в этом блоке все элементы не по месту (например, на местах с 4 по 6 находятся элементы 2, 9 и 12).

Вот поэтому мы будем разбивать нашу выборку (определяется факториальной системой счисления) на блоки только по 3 элемента, а все числа факториальной системы счисления должны состоять из кратного трем числа элементов (15,18,21 и т. д.). Тем, кто не уловил мысль, подсказываю: перестановок 3-х элементов из 3-х равно 3! = 6 вариантов.

6 делится на 2 (двоичный код) и на 3 (троичный код — количество элементов в созданном нами минимальном блоке). Кроме того, субфакториал 3 равен 2, а это 2 значения, при котором все элементы в нашем блоке-тройке находятся не на своих местах. В оставшихся 4 значениях из 6 хоть один из элементов будет находиться на своем месте.

Запись 6 значений будем формировать всего в 4 значения (2 бита) с выносом определителя значений (по месту или не по месту) за скобки (да/нет — 1 бит), то есть некое подобие выноса множителя.

Посмотрим первую часть представления на примере числа комбинаций 15! :

Номер блока-тройки

1

2

3

4

5

Итого бит

Значений по месту/не по месту

2

2

2

2

2

Значений в конечном блоке-тройке

4

4

4

4

4

Всего бит

3

3

3

3

3

15

Опытный глаз математика увидит, что мы неэкономно 8 значениями определили всего 6 значений блока-тройки элементов. Но это только начало всей конструкции. Дальше мы это поправим.

Также мы пока не знаем, в каком порядке находится вся наша перестановка (число) из 15 элементов, поэтому согласно делению на блоки-тройки определим содержание каждого блока (далее — блок) без указания точного места, для экономии места в записи. Это мы будем делать сначала для блока 1, потом для блока 2 и т. д. В этом нам поможет самая незатратная по емкости записи формула комбинаторики — количество сочетаний из n по k.

Ищем все возможные значения в блоке 1:

— количество сочетаний из 15 по 3 равно 455.

Далее ищем все возможные значения в блоке 2:

— количество сочетаний из оставшихся 12 по 3 равно 220.

Далее ищем все возможные значения в блоке 3:

— количество сочетаний из оставшихся 9 по 3 равно 84.

Далее ищем все возможные значения в блоке 4:

— количество сочетаний из оставшихся 6 по 3 равно 20.

Далее ищем все возможные значения в блоке 5:

— их можно не искать, остались последние 3 элемента, не вошедшие в первые блоки.

Представим второй этап в таблице и возьмем логарифм с основанием 2 по каждому значению C (n, k) полученных выборок, чтобы увидеть сколько это занимает места в двоичном коде:

Номер блока-тройки

1

2

3

4

5

Итого бит

Выборка из

15

12

9

6

3

сколько выбираем

3

3

3

3

3

Значения C (n, k) =

455

220

84

20

1

лог 2

8,829723

7,78136

6,392317

4,321928

0

27,32533

Пусть Вас не пугают дроби в обозначении числа бит, в общей итоговой записи они суммируются, но это здесь мы не будем доказывать.

Теперь подведем промежуточные итоги:

У нас получилось записать число вариантов, ограниченных 15! на 42,32 битах (15+27,32), а это немного больше, чем 40,25 бита, которыми записывается в позиционной двуричной системе счисления 15! (1307674368000 значений).

Значит надо что-то делать.

Помните, мы выделили определители (типа множители) на первом этапе работы с блоками-тройками?

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

Вот она суперпозиция числа!

У нас одно число (определитель значений по месту в блоке) имеет больше одного значения и влияет сразу на две записи в числе. У нас таких определителей обозначено столько же сколько и блоков троек. В примере их 5.

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

Для этого я сначала выложу таблицу перестановок 3 элементов из чисел элементов кратных 3, начиная с 3 до 60 для понимания закономерностей.

Часть 1 таблицы:

Количество блоков-троек

Факториальная система счислений (ФСС)

Общее число значений ФСС

Блок 1

Блок 2

Блок 3

Блок 4

Блок 5

Блок 6

1

3

6

1

2

6

720

20

1

3

9

362880

84

20

1

4

12

479001600

220

84

20

1

5

15

1,30767E+12

455

220

84

20

1

6

18

6,40237E+15

816

455

220

84

20

1

7

21

5,10909E+19

1330

816

455

220

84

20

8

24

6,20448E+23

2024

1330

816

455

220

84

9

27

1,08889E+28

2925

2024

1330

816

455

220

10

30

2,65253E+32

4060

2925

2024

1330

816

455

11

33

8,68332E+36

5456

4060

2925

2024

1330

816

12

36

3,71993E+41

7140

5456

4060

2925

2024

1330

13

39

2,03979E+46

9139

7140

5456

4060

2925

2024

14

42

1,40501E+51

11480

9139

7140

5456

4060

2925

15

45

1,19622E+56

14190

11480

9139

7140

5456

4060

16

48

1,24139E+61

17296

14190

11480

9139

7140

5456

17

51

1,55112E+66

20825

17296

14190

11480

9139

7140

18

54

2,30844E+71

24804

20825

17296

14190

11480

9139

19

57

4,05269E+76

29260

24804

20825

17296

14190

11480

20

60

8,32099E+81

34220

29260

24804

20825

17296

14190

Закономерность уже видна, поэтому для экономии времени средние значения опущу и выложу последние. А закономерность такова: значений не по месту при определении блока-тройки ровно столько же как и значений выборки всех перестановок из числа на 3 элемента меньше рассматриваемого.

Количество блоков-троек

Факториальная система счислений (ФСС)

Общее число значений ФСС

Блок 15

Блок 16

Блок 17

Блок 18

Блок 19

Блок 20

1

3

6

2

6

720

3

9

362880

4

12

479001600

5

15

1,30767E+12

6

18

6,40237E+15

7

21

5,10909E+19

8

24

6,20448E+23

9

27

1,08889E+28

10

30

2,65253E+32

11

33

8,68332E+36

12

36

3,71993E+41

13

39

2,03979E+46

14

42

1,40501E+51

15

45

1,19622E+56

1

16

48

1,24139E+61

20

1

17

51

1,55112E+66

84

20

1

18

54

2,30844E+71

220

84

20

1

19

57

4,05269E+76

455

220

84

20

1

20

60

8,32099E+81

816

455

220

84

20

1

Далее выкладываю таблицу перестановок 3-х элементов из чисел элементов кратных 3, начиная с 3 до 60 с разбивкой на присутствие в блоках-тройках значений по месту и их отсутствие значений на своем месте.

Количество блоков-троек

Факториальная система счислений (ФСС)

Всего выборок для определения блока-тройки

Значение в блоке-тройке    ДА

Значение в блоке-тройке    НЕТ

1

3

1

1

0

2

6

20

19

1

3

9

84

64

20

4

12

220

136

84

5

15

455

235

220

6

18

816

361

455

7

21

1330

514

816

8

24

2024

694

1330

9

27

2925

901

2024

10

30

4060

1135

2925

11

33

5456

1396

4060

12

36

7140

1684

5456

13

39

9139

1999

7140

14

42

11480

2341

9139

15

45

14190

2710

11480

16

48

17296

3106

14190

17

51

20825

3529

17296

18

54

24804

3979

20825

19

57

29260

4456

24804

20

60

34220

4960

29260

Тут к ранее подмеченной закономерности отмечаем, что с ростом выборки перестановок 3-х элементов из N, начиная с 6 блоков-троек (ФСС 18!) число значений, где все элементы находятся не на своих местах начинает превышать число выборок, где есть хоть один элемент на своем месте.

Теперь приступаем к созданию сжатой системы счисления, отбрасывая лишние для записи элементы. Подчеркиваю, точной записи без всяких потерь.

В записи количества значений перестановок блоков троек резервируем максимальное число значений: до ФСС 15! (5 блоков-троек) включительно это максимум для значений по месту, начиная с ФСС 18! (6 блоков-троек) это максимум для значений не по месту.

Соответственно, если определитель блоков-троек будет указывать на меньшую область значений, то автоматически общая запись всего искомого числа дополнительно уменьшится. Для полной записи в самых неэкономичных случаях резервируем максимальной число описаний блоков-троек независимо по месту элементы или не по месту.

Тот же пример, с максимальными выборками блоков-троек, в которых присутствуют значения элементов по месту:

Номер блока-тройки

1

2

3

4

5

Итого бит

Определение значений по месту

да

да

да

да

да

5

Выборка из

15

12

9

6

3

сколько выбираем

3

3

3

3

3

Значения C (n, k) =

235

136

64

19

1

лог 2

7,876517

7,087463

6

4,247928

0

25,21191

Значений в конечном блоке-тройке

4

4

4

4

4

лог 2

2

2

2

2

2

10

ИТОГО бит

40,21191

В этом сжатом без потерь виде мы получили запись ФСС 15! вариантов на 40,21 бита, классическая запись в двоичной системе счисления занимает 40,25 бита. Получили сжатие 0,04 бита или в 1,000951 раза.

Далее при росте факториальной системы счисления, растет и коэффициент сжатия. Например, при ФСС 60! Мы получаем сжатую запись на 265,3711 бит против двуричной на 272,13293 бита с коэффициентом сжатия уже 1,0254805.

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

Вот такова конструкция простейших суперпозиционных систем счисления.

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

4. Пути и методы дальнейшего развития сжатия бинарного кода.

Даже самое незначительное сжатие абсолютно хаотического двузначного кода открывает безграничные возможности для усиления этого сжатия. Вот несколько возможных приемов усиления сжатия выше показанных суперпозиционных систем счисления:

  1. Обозначение сжатыми блоками элементов (множителей)  позиционных систем счисления с основаниями больших порядков.

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

  3. Для поиска минимальных значений длины кода в асимметричной записи перестановок блоков-троек можно использовать запись не последовательных значений, а через интервалы как равные, так и с неравномерными значениями, как, например, цифры в бесконечной дроби числа Пи.

  4. Использование разных по разрядности факториальных систем счисления на всей длине сжимаемого кода.

Приемов, как можно сжать вышеуказанные суперпозиционные системы счисления, подсчитать и предугадать не представляется возможным.

Habrahabr.ru прочитано 1160 раз