Обычно говорят, что алгоритм с логарифмией c сложность по времени O(log n)
- это алгоритм, в котором удвоение входных данных не обязательно удваивает объем требуемой работы. И часто, алгоритмы поиска приводятся в качестве примера алгоритмов со сложностью логарифми c.
Имея это в виду, допустим, у меня есть функция, которая также принимает массив строк в качестве первого аргумента. в качестве отдельной строки в качестве второго аргумента, и возвращает индекс строки в массиве:
function getArrayItemIndex(array, str) {
let i = 0
for(let item of array) {
if(item === str) {
return i
}
i++
}
}
И давайте скажем, что эта функция вызывается следующим образом:
getArrayItemIndex(['John', 'Jack', 'James', 'Jason'], 'Jack')
В В этом случае функция не будет проходить через весь массив, пока не вернет индекс 1
. И точно так же, если бы мы удвоили элементы в массиве так, чтобы он вызывался следующим образом:
getArrayItemIndex(
[
'John',
'Jack',
'James',
'Jason',
'Jerome',
'Jameson',
'Jamar',
'Jabar'
],
'John'
)
... тогда удвоение элементов в массиве не обязательно вызвало бы время выполнения двойной функции, видя, что она вышла бы из l oop и вернулась после самой первой итерации. Из-за этого, тогда правильно ли говорить, что функция getArrayItemIndex
имеет логарифмическую c сложность по времени?