Немного легче увидеть, если вместо того, чтобы i
бегал сверху, вы считали снизу. Поэтому, если мы скажем i
- это высота снизу, мы преобразуем вашу сумму в:
∑ i * 2 h-i
= 2 ч * ∑ i / 2 i
= 2 ч * O (1)
= O (2 logn ) = O (n)
Я поменял h на logn, так как это двоичная куча.
Я объясню, почему эта сумма равна O (1):
Сумма является конечной суммой слагаемых i / 2 i , поэтому, если мы покажем сходимость бесконечной суммы (i -> бесконечная), то, очевидно, каждая конечная сумма (т.е. для всех n) будет суммировать меньше, чем это значение (так как все условия являются положительными). Значение каждой конечной суммы ограничено константой, т. Е. O (1).
Нам остается только доказательство того, что бесконечность ∑ i / 2 i сходится. Мы можем использовать множество тестов сходимости, давайте воспользуемся простым результатом, что i 1 / i 2 сходится и покажем, что для достаточно большого i будет верхняя граница нашей суммы:
Мы хотим показать, что для достаточно большого я:
i / 2 i <1 / i <sup>2
, что происходит, если i 3 <2 <sup>i , что верно, скажем, для i> 10
КЭД