интуитивный способ думать об этом, чтобы увидеть, как много работы вашей внутренней петля делает для фиксированного значения внешнего переменного цикла i
. Это явно целых i. Таким образом, если значение i равно 256, то тогда вы будете делать j = j + 1
, что много раз.
Таким образом, общая выполненная работа представляет собой сумму значений, которые i принимает во внешнем цикле выполнение. Эта переменная растет очень быстро, чтобы догнать n. Его значения, заданные i = 2i
(это должно быть i = 2*i
), будут следующими: 2, 4, 8, 16, ...
, потому что мы начинаем с 2 итераций внутреннего контура, когда i = 1
. Это геометрический ряд: a, ar, ar^2 ...
с a = 1
и r = 2
. Последний термин, как вы выяснили, будет n
, и в серии будет log2 n
. И это простое суммирование геометрического ряда.
Не имеет смысла иметь худший случай или лучший случай для этого алгоритма, потому что в этом случае нет разных перестановок ввода, который в данном случае является просто числом n
. Наилучший случай или наихудший случай имеют значение, когда конкретный ввод (например, конкретная последовательность чисел) влияет на время работы алгоритма.
Хронометраж то есть sum of geometric series (a.(r^num_terms - 1)/(r-1)
):
T(n) = 2 + 4 + ... 2^(log2 n)
= 2 . (2^log2 n - 1)
= 2 . (n - 1)
⩽ 3n = O(n)
Таким образом, вы не можете делать работу, которая является более некоторой константы п. Следовательно, время работы этого алгоритма составляет O(n)
.
Вы не можете выполнять какую-либо работу, которая меньше некоторой (другой) константы, кратной n, так как вам нужно пройти через инкремент во внутреннем цикле, как показано выше. Таким образом, время выполнения этого алгоритма также равно ≥ c.n, то есть Ω(n)
.
Вместе это означает, что время работы этого алгоритма равно Θ(n)
.
aight, так что худшее время работы - это просто количество раз, когда самая внутренняя петля будет работать, правильно? и как я могу использовать тета-нотацию, чтобы доказать это? – Mattia
@Chris Я обновил его для полноты, дайте мне знать, если это ясно (вы можете сказать это, приняв ответ). –