У меня есть проблема, чтобы определить сложность моего алгоритма, потому что он использует функции ES6 и, конечно, это цепочечные методы. Я уже знаю некоторые основные сложности этого метода, например, сложность Array.prototype.map равна O (n) . Но когда мы хотим определить сложность алгоритма, как мы управляем цепным методом?
Например, представьте, что у нас есть функция, которая возвращает для массива сумму его положительных чисел
let sumPositive = arr => arr.filter(i => i > 0).reduce((a, b) => a + b, 0);
console.log(sumPositive([1, 2, 3, -4])); // 6
console.log(sumPositive([1, 2, 3, 4])); // 10
Следовательно, какова сложность этой функции ?
Другим примером является этот алгоритм, который для данной строки возвращает количество каждого символа в строке
let charCount = str => str.split('').map(
(c,_,str) => str.filter(i => i===c)
).reduce((a, b) => a.hasOwnProperty(b[0]) ? a : ({...a, [b[0]]: b.length}), {});
console.log(charCount("hi")); // {"h": 1, "i": 1}
console.log(charCount("hello to you")); // {"h": 1, "e": 1, "l": 2, "o": 3, " ": 2, "t": 1, "y": 1, "u": 1}
Итак, на эту секунду мне нужно особенно знать его сложность, потому что мы имеем дело с вложенным методом, таким как фильтр, который вызывается внутри карты
Так что любой общий метод определения сложности такого алгоритма приветствуется.
Примечание : Вся сложность в этом вопросе - сложность времени, а не пространства
Спасибо