2016-11-29 6 views
4

Не могли бы вы объяснить, как найти временную сложность следующего кода? Любая помощь оценивается.Как найти временную сложность следующего кода?

int boo(n) { 
    if (n > 0) 
    { 
     return 1 + boo(n/2) + boo(n/2); 
    } 
    else 
    { 
     return 0; 
    } 
} 
+0

Это может помочь вам http://stackoverflow.com/questions/13467674/determining-complexity-for-recursive-functions-big-o-notation –

+0

@ DanielCorzo Спасибо, Даниэль, я уже это видел. Ситуация здесь немного другая. – Yazgan

ответ

1

enter image description here

Иногда это хорошо, чтобы записать его. Когда вы начинаете, он суммирует 1 + boo (n/2) + boo (n/2), который находится во второй строке.

И каждый из этой п/2 выполняется также

и т.д. и т.п.

Таким образом, в конце концов, в то время как количество звонков растет exponencially, число repetions только logharitmic, который в конец удаляет друг друга, и вы получаете O (N).

PS: Достаточно подсчитать последнюю строку, у всего дерева всегда только один раз больше узлов (минус один), которые по теории сложности небрежны (вам не нужны константы, которые умножаются на два)

+0

спасибо большое mate (: – Yazgan

+0

Этот точный вопрос приходит на экзамен LOL еще раз спасибо @libik – Yazgan

+0

@Язган - вау, я надеюсь, что я прав: D ... – libik

Смежные вопросы