Вы геометрическая прогрессия в ваших внешних петлях, так что замкнутая форма на сумму которого вы хотите взять журнал:
1 + 2 + 4 + ... + 2^N = 2^(N+1) - 1
Чтобы быть точным, ваша сумма
1 + ... + 2^(floor(ld(N))
с ld
обозначая логарифм по основанию 2.
наружные две петли являются независимыми друг от друга, в то время как внутренний цикл зависит только от i
. Существует одна операция (приращение) в самом внутреннем цикле, что означает, что количество посещений самой внутренней петли равно суммарному результату.
\sum_i=1..(floor(ld(N))) {
\sum_j=1..(floor(ld(N))) {
\sum_k=1..2^i { 1 }
}
}
// adjust innermost summation bounds
= \sum_i=1..(floor(ld(N))) {
\sum_j=1..(floor(ld(N))) {
-1 + \sum_k=0..2^i { 1 }
}
}
// swap outer summations and resolve innermost summation
= \sum_j=1..(floor(ld(N))) {
\sum_i=1..(floor(ld(N))) {
2^i
}
}
// resolve inner summation
= \sum_j=1..(floor(ld(N))) {
2^(floor(ld(N)) + 1) - 2
}
// resolve outer summation
= ld(N) * N - 2 * floor(ld(N))
Это составляет O(N log N)
(второе слагаемое в выражении равно нулю асимптотически WRT к первой) в Big-Oh обозначении.
У меня проблема с ответом, что 'O (.) - O (.)' Не определен. Что это? Сложная подстановка? (Очевидно, что нет ...) Пожалуйста, исправьте эту проблему, и я с радостью продолжу. – amit
@amit. Вы совершенно правы. Символизм призван выразить, что одна временная сложность доминирует над другой, но на самом деле она злоупотребляет нотацией. Исправление ответа. – collapsar