На рисунке ниже представлена иллюстрация к алгоритму. Сначала опишу алгоритм, а потом что требуется сделать и какие вопросы. На предварительном этапе для нелинейного преобразования S составляется таблица DDT размером 256 * 256. В ячейку (i, j) этой таблицы записывается число пар с входной разностью i и выходной разностью j. При этом разность оценивается с помощью побитового сложения по модулю 2.
Вот алгоритм сложность которого интересует:
1) выбираем случайно 3 ненулевых байта для состояния 4 (на рисунке выделены желтым цветом);
   2) применяем преобразования L и T к этому состоянию и получаем значения байтов для состояния 3;
   3) для каждой строки состояния 1 выполняем следующие шаги:
       3.1) установить значение желтого байта равным 0;
              3.2) увеличить значение желтого байта на 1;
              3.3) умножаем строку состояния 1 на матрицу линейного преобразования и получаем строку в сост-ии 2;
              3.4) с помощью ранее заготовленной таблицы проверяем, есть ли пары байтов у которых входная                  
                     разность определяется состоянием 2, а выходная разность состоянием 3. Если да, то переходим к 
                     обработке следующей строки.
              3.5)  если значение байта < 255, то переходим к шагу 3.2. В противном случае переходим к шагу 1.

Вот как я пытаюсь получить теоретическую оценку сложности. Пусть p - это вероятность того, что для выходной разности (байт) в строке состояния 3, есть входная разность в соответствующей позиции состояния 2. Значение p можно получить из анализа DDT. Тогда вероятность того, что для данной строки состояния 3 существует входная строка равна 

. Следовательно, вероятность того, что для всех строк состояния 3 существуют входные строки в состоянии 2 равна  

. Значение p примерно равно 0.5. Следовательно, средняя трудоемкость равна 

. В чем здесь ошибка? На практике получаю, что сложность значительно меньше.