Краткий ответ:
Оба имеют значение Log (n)
, поскольку для входа n оба цикла будут выполняться в течение Log (n) раз.
Пока первый цикл выполняется Log (n) раз из-за i *= 2
в цикле for, второй цикл запускается Log (n) раз из-за верхнего предела в цикле for, установленном непосредственно на это значение.
Подробно:
Big-O сообщает Скорость роста функции. Второй цикл - тот, который вас смущает - на самом деле проще из двух циклов. Вы можете непосредственно видеть, что для любого входа n функция всегда будет занимать время, пропорциональное только Log (n) .
Следовательно, скорость роста второго цикла пропорциональна Log (n) или, другими словами, равна O (Log (n)).