С вашего поста я понял, что вы знаете о значении нотации O, но имеете некоторые проблемы с его применением. Здесь в этом простом примере достаточно определить, сколько раз (в зависимости от вашего размера ввода) выполняются циклы. Чтобы получить окончательное значение, вы должны объединить его.
Первый шаг: проанализировать время выполнения за цикл. (Без петли или рекурсивные утверждения имеют O (1).)
while(i<=n)
...
i=i+1
выполняется п раз, таким образом, О (п)
Внутренний цикл в то время как (J < = я) J = J * 2
Выполняется i/2 раза, но ограничено n из внешнего контура. Таким образом, это O (n).
Как есть внутренняя петля с использованием O (N) во внешнем контуре нужно умножить asymptitics, то есть п * п => О (п^2)
Ваш анализ внутреннего цикла, в то время как технически правильный, не является жесткой привязкой, поэтому ваш общий ответ не является плотной. – templatetypedef
На самом деле этот пример был из старого экзамена, где предположительно правильный ответ: O (n * log (n)) – Trondheim
Да, вы правы, мой ответ верен – sim