Не совсем уверен, но здесь идет.
Второй цикл выполняется 1 - sqrt(1) + 2 - sqrt(2) + ... + n - sqrt(n) = n(n+1)/2 - n^1.5
раз => O(n^2)
раз.См. здесь для обсуждения того, что sqrt(1) + ... + sqrt(n) = O(n^1.5)
.
Мы установили, что третий цикл будет запущен O(n^2)
раз.Таким образом, алгоритм асимптотически эквивалентен примерно так:
for i = 1 to n do
for j = 1 to n do
for k = 1 to log(i+j) do
++foo
Это приводит к сумме log(1+1) + log(1+2) + ... + log(1+n) + ... + log(n+n)
.log(1+1) + log(1+2) + ... + log(1+n) = log(2*3*...*(n+1)) = O(n log n)
.Это умножается на n
, что приводит к O(n^2 log n)
.
Так что ваш алгоритм также O(n^2 log n)
, а также Theta(n^2 log n)
, если я не ошибаюсь.