Вы правы, что внешний l oop работает O (n) раз. Вы также правы, что максимальное количество времени, которое внутренний l oop занимает до конечного значения sh, составляет O (2 n ). Поэтому нельзя ошибочно утверждать, что проделанная работа не более O (n2 n ).
Однако эта граница не является жесткой, поскольку в этом анализе предполагается, что работа число выполненных на каждой итерации внутренней l oop равно максимальной работе, выполненной внутренней l oop на каждой итерации. Рассуждая по аналогии: если у меня десять животных, и самое тяжелое из них - слон весом 1000 кг, я могу правильно сказать, что животные в совокупности весят не более 10 000 кг, умножая количество животных на максимальную массу, но это может быть диким завышением , Было бы лучше просто сложить массы каждого отдельного животного, чтобы увидеть, что я получу.
В этом случае нам нужно наблюдение, чтобы i-й раз мы go прошли через этот внутренний l * 1034. * мы проводим 2 i итераций. Это означает, что общая выполненная работа примерно равна
2 0 + 2 1 + ... + 2 n-1 .
Это сумма геометрии серии c, и она получается до 2 n - 1, следовательно, общая O (2 n ) ограниченный по времени. Возвращаясь к примеру с животными, если мои животные - это белка весом 1 кг, черепаха весом 10 кг, человек весом 100 кг и слон весом 1000 кг, то почти вся масса учитывается слоном, потому что массы растут так быстро. Формальное выражение для суммы геометрических рядов c делает эту идею математически строгой.