【发布时间】:2021-11-18 23:28:45
【问题描述】:
我正在寻找这个问题的答案,但找不到任何答案。
new Array(n).fill('apple')的时间复杂度是多少?
对于n=5,这将创建一个包含 5 个“苹果”字符串的数组:['apple', 'apple', 'apple', 'apple', 'apple']
我的假设是 new Array(5) 将首先创建一个包含 5 个空槽的数组,然后遍历它以将“苹果”放入每个槽中。 这种情况下,时间复杂度是O(N),N是数组的长度?
不过,我也听到有人说,既然是内置方法,所以只需要 O(1)。
【问题讨论】:
-
首先,填充一个 N 长度的数组没有免费的午餐。在某种程度上它将是 O(n)。如果它是使用本机代码非常有效的操作,它可能是一个非常快的 O(n),但它在某种程度上与数组的长度成正比。其次,实际性能完全取决于实施,您了解实际性能的唯一方法是测量/基准测试。这是回答任何性能问题的一个组成部分。最后,你为什么想知道?基于了解这一点,你会做些什么不同的事情?真正的问题是什么?
-
你的假设是正确的,
Array(5)在未定义的.fill('apple')上创建一个数组来填充它们,通过像Array(5).fill('apple')这样调用不会神奇地让它做其他事情 -
@LawrenceCherone 它不会创建一个数组“of undefined's”。 OP 的描述“一个有 5 个空槽的数组”要准确得多。
-
"因为它是一个内置方法,所以只需要 O(1)" - 这种概括是错误的。有很多“内置”方法,例如 O(n)、
Array.prototype.map、Array.prototype.filter、Array.prototype.find等等。 -
@Bergi 语义playcode.io/815709
标签: javascript arrays ecmascript-6 time-complexity fill