Мне интересно, как рассчитать временную сложность такой комбинации:
"some string"
.split(" ") // O(n)
.map(
word => doSomething(word) // word length = j, doSomething(word) => O(j)
) // O(n * j) => O(n^2) ???
doSomething
- это функция линейной сложности, не представляющая, что она делает.
Итак, согласно Большой O встроенной функции разделения javascript , временная сложность .split(" ")
будет O(n)
На следующей строке у нас есть массив .map
для слов, который в худшем случаерегистр может быть O(n/2)
=> O(n)
, когда у нас есть все слова, содержащие один символ.
Внутри функции карты мы делаем некоторую операцию над словом длиной j
=> O(j)
. Учитывая, что это слово может иметь размер полной строки (без пробелов) O(j) => O(n)
В результате мы имеем общую сложность времени O(n^2)
НО, если у нас наихудший случай на .mapшаг O(n)
тогда у нас не может быть худшего случая внутри карты, потому что общая сумма всех слов длины равна размеру входной строки. Таким образом, мы не можем преобразовать O(j) to O(n)
Какова будет сложность времени?
Обновление
Хорошо, я сделал несколько экспериментальных измерений, и вот что я 'у меня на компьютере https://www.wolframalpha.com/input/?i=listplot%5B%7B%7B10%2C+0.015%7D%2C%7B100%2C+0.1%7D%2C%7B1000%2C+0.72%7D%2C%7B10000%2C+8.5%7D%2C%7B100000%2C+67.89%7D%2C+%7B1000000%2C+642.60%7D%2C+%7B10000000%2C+6657.4%7D%2C+%7B100000000%2C+70076.01%7D+%7D%5D
ось X => время мс
ось Y => длина входной строки
данные, сгенерированные случайным образом
сложностьявно линейный.