在JavaScript中数组是很容易的添加和删除项目进行修改。 这一定程度上掩盖了事实,大多数语言数组是固定大小的,并且需要复杂的操作来调整。 似乎的JavaScript可以很容易地编写表现不佳的阵列码。 这导致了一个问题:
我可以从JavaScript实现期望的问候阵列的性能表现是什么(在大O时间复杂性方面)?
我认为所有合理的JavaScript实现至少有以下大O的。
- 访问 - O(1)
- 追加 - O(N)
- 预谋 - O(N)
- 插入 - O(n)的
- 删除 - O(N)
- 交换 - O(1)
JavaScript允许你预先填充的阵列到一定大小,使用new Array(length)
的语法。 (加成问题:是以这种方式创建Ö阵列(1)或O(n))的这更像传统的阵列,并且如果用作预大小的数组,可以允许O(1)附加。 若添加循环缓冲器逻辑,可以实现O(1)预先考虑。 如果使用动态扩展阵列,O(log n)的将是这两个的平均情况。
我可以期待某些地方比这里我的假设更好的性能? 我不希望任何事情在任何规格概述,但实际上它可能是所有主要实现在后台使用优化的阵列。 是否有动态扩展的阵列或一些其它的性能在工作中增强算法?
PS
我不知道这样做的原因是因为我研究了一些排序算法,其中大部分似乎认为追加和删除所描述他们的整体大O.时,O(1)操作