JavaScript 数组的大 O
JavaScript 中的数组很容易通过添加和删除项目来修改。它在某种程度上掩盖了这样一个事实,即大多数语言数组的大小是固定的,并且需要复杂的操作来调整大小。似乎JavaScript使编写性能不佳的数组代码变得容易。这就引出了一个问题:
在数组性能方面,我可以期望JavaScript实现有什么性能(就O时间复杂性而言)?
我假设所有合理的JavaScript实现最多都有以下大O。
- 交通 - O(1)
- 追加 - O(n)
- 预置 - O(n)
- 插入 - O(n)
- 删除 - O(n)
- 交换 - O(1)
JavaScript允许您使用语法将数组预先填充到一定大小。(奖励问题:是以这种方式创建数组 O(1) 还是 O(n))这更像是一个传统的数组, 如果用作预先调整大小的数组, 可以允许 O(1) 追加。如果添加了循环缓冲区逻辑, 则可以实现 O(1) 前缀。如果使用动态扩展数组,则 O(log n) 将是这两种情况的平均情况。new Array(length)
我能指望某些事情的性能比我在这里的假设更好吗?我不期望任何规范中都概述任何内容,但在实践中,可能是所有主要实现都在幕后使用优化的数组。是否有动态扩展的阵列或其他一些性能提升的算法在起作用?
附言
我想知道这一点的原因是我正在研究一些排序算法,其中大多数算法在描述其整体大O时似乎假设追加和删除是O(1)操作。