Для первого внутреннего l oop работает приблизительно (в точности, если n
является степенью 2)
n + n/2 + n/4 + n/8 + ... + n/2^log2(n)
раз. Это может быть учтено в
n * (1 + 1/2 + 1/4 + 1/8 + ... + (1/2)^(log2 n))
2-й фактор называется (частичная сумма) геометрия c ряд , которая сходится , что означает, что, как мы приблизиться к бесконечности, это приблизится к константе. Следовательно, это θ(1)
; умножив это на n
, вы получите θ(n)
Я провел анализ последнего алгоритма всего пару дней go. Число итераций для n
в этом алгоритме составляет
ceil(n) + ceil(n / 2) + ceil(n/3) + ... + ceil(n/n)
Это очень близко к частичной сумме гармоник c серии , умноженной на n
:
n * (1 + 1/2 + 1/3 + 1/4 + ... 1/n)
В отличие от геометрии серии c, серии гармоник c не сходятся, но расходятся по мере добавления новых терминов. Частичные суммы первых n
членов могут быть ограничены сверху и снизу ln n + C
, следовательно, временная сложность всего алгоритма составляет θ(n log n)
.