Например, я хочу получить число
в итоге (число, для записи которого, надо очень много знаков). Считаю количество шагов, которое затратил. Теперь это длинное число я могу записать, положим, как
,
,
....[Условно 6000 элемент этой последовательности]. Так и напишу - искомое число -
элемент
последовательности выше. А может, буду считать сумму членов такой последовательности и представлю это число, как
член
последовательности + 9999.
Тогда для каких-то чисел
номер элемента в последовательности будет
намного короче самого числа, для каких-то
немного короче самого числа, а для каких-то
намного длиннее самого числа. То есть где-то вы выиграете, а где-то обязательно проиграете. В среднем же, из-за энтропии вы все равно немного проиграете, и записать число короче чем оно есть, даже на самую малость - не получится. Выиграть тут можно только если будут записываться не все числа из какого-то диапазона, а только
некоторые из них. Только тогда появляется возможность представить их в более компактном виде.
Допустим, вы хотите придумать такой алгоритм, который позволит записать
все натуральные числа от
до
в более компактном виде. В процессе работы этот суперадаптивный, подстраивающийся под конкретное число, алгоритм, будет генерировать запись этого числа в своем собственном формате. На запись любого числа в
исходном формате потребуется 100 bit памяти. Этого достаточно чтобы описать
различных элементов. Допустим, что алгоритм найдет способ записать любое число из заданного диапазона, затратив на запись 99 bit памяти. Но этого достаточно лишь для описания
элементов, что значительно меньше количества элементов исходного диапазона. Таким образом, в общем случае, сэкономить даже 1 bit информации - не получится.