Мне нравится думать о циклах как об суммировании.Таким образом, число шагов (записанных как функция, T(n)
):
T(n) = \sum_{i=1}^n numStepsInInnerForLoop
Здесь я использую что-то, написанное в псевдо-MathJax, и записал внешний цикл for каксуммирование от i=1
до n
количества шагов во внутреннем цикле for (один от i+1
до n
).Вы можете думать об этом как о суммировании количества шагов во внутреннем цикле for от i=1
до n
.Подстановка в numStepsInInnerForLoop
приводит к:
T(n) = \sum_{i=1}^n [\sum_{j=i+1}^n numStepsOfSumFunction]
Эта функция теперь представляет число шагов, в которых оба цикла были выделены в виде суммирования.Предполагая, что s = sum(A[i...j])
делает j-i+1
шагов, а B[i,j]=s
делает только один шаг, мы можем заменить numStepsOfSumFunction
этими более полезными параметрами, и теперь уравнение становится:
T(n) = \sum_{i=1}^n [\sum_{j=i+1}^n (j-i+1 + 1)]
Когда вы решите эти суммирования(используя вид формул, которые вы видите на на этой странице учебника по суммированию ), вы получите кубическую функцию для T(n)
, которая соответствует O(n^3)
.