Это как? Последовательность у нас одна, и мы в принципе можем её просто заучить и выдавать в точности — как именно предполагается предсказывать?
Допустим, что мы получаем эту последовательность по телеграфу бит за битом и должны угадывать каждый следующий бит. Если это удается только в половине случаев, то последовательность случайна.
Как мне кажется, универсальный статистический алгоритм предсказания бита
следующий:
1. Если частота единиц выше, чем частота нулей - предсказываем единицу (и наоборот);
2. Если они равны, рассматриваем пару предсказываемый
последний бит (допустим, это
) и находим частоту для пар 00, 01. Предсказываем ту пару, частота которой выше;
3. Если они равны, рассматриваем последнюю тройку бит (допустим, это
) и находим частоту для троек 100 и 101. И т.д.
Этот алгоритм не позволяет ничего предсказывать, только если частоты всех элементов, пар, троек и т.д. равны. Как-то я написал такой алгоритм, он должен был угадать число (0 или 1), которое я загадываю. Он выигрывает.
Можно сказать шире: последовательность случайна, если при утрате любого ее элемента его правильное восстановление возможно только с вероятностью 0,5.
А ещё есть последовательность де Брёйна
Как я понял, эта последовательность имеет два параметра: число разных элементов
, из которых она будет состоять (например, 2 для бинарной последовательности) и размер
подпоследовательности, все возможные варианты которой можно по одному разу обнаружить в этой последовательности. Это не совсем то, что нужно, т.к. случайная последовательность, по моему, должна быть последовательностью де Брёйна сразу для всех возможных
.
Еще меня давно интересовал вопрос о связи случайности и отсутствия статистических закономерностей. Например, последовательность знаков иррационального числа не имеет статистических закономерностей, но она не случайна. Есть компактная формула для ее представления, например, в виде ряда или цепной дроби. Существует ли способ при помощи статистического анализа последовательности понять, что перед нами, скажем,
?
Объясняется ли это тем, что при попытке вычислить иррациональное число по известной формуле, мы будем вынуждены использовать алгоритм, который будет занимать в памяти места не меньше, чем уже вычисленная последовательность? (Он должен будет использовать уже вычисленный ряд цифр для продолжения вычислений). Т.е. эта компактная формула не так уж компактна, а под размером алгоритма нужно понимать не только саму формулу, но и объем данных, которыми она оперирует?