Google Chrome 中 array.splice() 的时间复杂度是多少?

2024-04-25

如果我使用 splice() 从数组中删除一个元素,如下所示:

arr.splice(i, 1);

这会是O(n)在最坏的情况下,因为它会移动 i 之后的所有元素?或者它是常数时间,下面有一些链表魔法?


最坏的情况下should be O(n)(复制所有n-1元素到新数组)。

链表将是O(1)对于单个删除。

对于那些感兴趣的人,我做了这个懒惰的制作基准 http://jsfiddle.net/eXgkT/1/. (请不要在 Windows XP/Vista 上运行 http://ejohn.org/blog/accuracy-of-javascript-time/)。 正如你所看到的,它看起来相当稳定(即O(1)),所以谁知道他们在幕后做了什么才能让这一切变得如此疯狂。请注意,无论如何,实际splice非常快。

重新运行扩展基准 http://jsfiddle.net/eXgkT/2/直接在 V8 shell 中提示O(n)。但请注意,您需要巨大的数组大小才能获得可能影响代码的运行时。这应该是预料之中的,就像您查看它使用的 V8 代码一样memmove创建新数组。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Google Chrome 中 array.splice() 的时间复杂度是多少? 的相关文章

随机推荐

  • 如何获取旋转器中的项目数量?

    如何动态获取微调器中的项目数 你可以试试 mSpinner getAdapter getCount
  • AppWidgetProvider 和 RemoteViewsService.RemoteViewsFactory 之间共享数据的正确方法是什么

    目前 我的AppWidgetProvider有静态数据 它用于传递信息AppWidgetProvider RemoteViewsService RemoteViewsFactory public class MyAppWidgetProvi
  • 是什么原因导致 grunt.js 中的 /*global module: false*/

    许多 grunt js 脚本以以下内容开头 global module false module exports function grunt 但是第一行注释的原因是什么 它是 JSLint 或 JSHint 的指令 它告诉 JSLint
  • 如何矢量化 3D Numpy 数组

    我有一个 3D numpy 数组 例如a np zeros 100 100 20 我想对每个执行操作x y涉及所有元素的位置z轴 结果存储在一个数组中 例如b np zeros 100 100 在同一个对应的x y位置 现在我使用 for
  • /storage/logs 处不存在现有目录且不可构建:权限被拒绝

    我在 OVH Web 服务器上部署 Laravel 时遇到问题 制作完成后 composer update php artisan cache clear php artisan route clear php artisan dump a
  • Amazon Redshift-备份和恢复最佳实践?

    我们在 Redshift 中有一组表 其中的列具有 IDENTITY 属性 用于序列生成 在测试阶段 需要进行备份和恢复 这是每个测试周期的重复活动 我们按照以下流程进行备份然后恢复 并遇到以下问题 传统方式 使用 CREATE TABLE
  • 是否可以同时从多个 Mercurial 存储库中提取数据?

    我希望能够做这样的事情 hg pull http server repo1 http server repo2 http otherserver repo 并让所有变更集立即下来 添加了 x 变更集 并对 z 文件进行了 y 更改 消息聚合
  • 如何在java中使用布尔值对ArrayList进行排序?

    我有一个带有自定义对象的 ArrayList 它们包含一个我想要排序的复选框对象 我正在使用这个比较器函数对其进行排序 我使用 XOR 运算符来检查它们是否彼此相等 然后将其取反 然而 这不起作用 并且列表保持相同的顺序 有谁知道出了什么问
  • 适用于 Littler 或 Rscript 的外部图形设备

    我真的很喜欢 Littler 对于使用 R 编写脚本非常有用 但我不知道如何使用 gnuplot 中的外部图形设备 例如使用 Octave 我能够生成所需的图表 但我必须使用 Sys sleep 并且我不想这样做 因为我想以交互方式自行关闭
  • 如果图像尺寸太大,在 SQL Server 中存储图像的最佳方式是什么?

    是否可以在 SQL Server 中存储大小为 3GB 的图像 我知道这似乎是不切实际的场景 但我很好奇是否可以以任何方式将图像保存在数据库中 微软建议您使用文件流 https msdn microsoft com en GB librar
  • 在 GCC 中启用严格浮点模式

    我还没有创建一个程序来查看 GCC 是否需要它通过 当我这样做时 我想知道如何启用严格的浮点模式 这将允许在运行和计算机之间重现结果 谢谢 编译用 msse2在支持它的 Intel AMD 处理器上 您几乎就可以实现这一目标 不要让任何库将
  • Selenium WebDriver jQuery

    我对 Selenium WebDriver 非常陌生 我正在学习如何使用 jQuery 选择器来处理元素 而不是使用 XPath 表达式 ID 等 您能否提供一个链接来帮助我 在该链接中我可以找到有关如何在 Selenium WebDriv
  • Linux 中的 C 聊天室 / Socket 编程

    我有一个简单的服务器和客户端 C 代码来使用线程 pthread 库 为多客户端创建一个聊天室 我一直遇到的问题是 我无法想出一种方法让服务器将客户端通过套接字发送到所有其他客户端的每条消息写入 我在这里读过其他类似的帖子 但很无奈 请帮助
  • 使用 JavaScript/AngularJS 将数组转换为对象

    我需要将父数组内的数组转换为对象以匹配我的数据库模型数据 我有这样的数组 emails Array 2 0 email protected cdn cgi l email protection 1 email protected cdn c
  • 多个挑选事件干扰

    我有几个数据系列分散在一个图中 并且希望能够为它们切换注释 问题是 有时会触发两个拾取事件 当用户单击注释和点内的点时 注释 拾取事件会清除注释 但 点 拾取事件会将其放回原处 因此效果是切换不起作用 df pd DataFrame a n
  • R 使用值列表作为色标

    我想将变量的值表示为 R 中散点中的点的颜色 x lt rnorm 100 5 y lt rnorm 100 5 plot x y 在这里 我想使用一个变量作为着色的输入 但如果我尝试 plot x y col x 我得到了一些奇怪的东西
  • 递归算法无法在指定时间内完成测试

    我正在进行一项测试 需要二进制断层扫描算法 提供了一组 38 个测试值来测试正确性 但完成所有测试也有 1 CPU 秒的时间限制 问题如下 如果存在 m n 矩阵 A 且每个元素为 0 或 1 则输出 Yes 使得 否则输出 否 对于每个测
  • 在以下任何来源中均未找到插件 [id: 'org.jetbrains.kotlin.jvm', 版本: '1.2.71']

    我全新安装了 IntelliJ 使用以下设置创建了一个新的 kotlin gradle 项目 这会生成以下 build gradle kts 完全相同的文件在我的 Windows 计算机上运行 import org jetbrains ko
  • 创建可以传递参数而无需创建新组件的函数

    我的问题与这个问题有关React用于渲染函数中的绑定函数 以下不是好的做法 render div 因为每次重新渲染都会向页面添加一个新功能 最终导致浏览器内存不足 解决方案是这样做 constructor this callFunction
  • Google Chrome 中 array.splice() 的时间复杂度是多少?

    如果我使用 splice 从数组中删除一个元素 如下所示 arr splice i 1 这会是O n 在最坏的情况下 因为它会移动 i 之后的所有元素 或者它是常数时间 下面有一些链表魔法 最坏的情况下should be O n 复制所有n