php - 在 Ruby、Python 或 PHP 中,是否有一个插入到 Array 对象中间需要 O(1) 时间的操作?

标签 php python ruby arrays performance

我认为,通常情况下,插入到数组的中间(任何位置)可能代价高昂——将元素移动到一个槽上可能需要 O(n) 时间,并且可能需要为数组重新分配内存。另一方面,链接可能需要 O(1) 时间。

但是在 Ruby、Python 和 PHP 中,是否有一个数组对象只需要 O(1) 时间就可以在数组中间插入一个元素?

更新:并且必须遵循的是,在数组中的任何位置替换数组元素或访问它也是 O(1)。

更新:插入如下:

1.9.3-p125 :001 > RUBY_DESCRIPTION
 => "ruby 1.9.3p125 (2012-02-16 revision 34643) [x86_64-darwin11.3.0]" 

1.9.3-p125 :002 > a = %w{ a b c d }
 => ["a", "b", "c", "d"] 

1.9.3-p125 :007 > a.insert(3, 123)
 => ["a", "b", "c", 123, "d"] 

最佳答案

在 PHP 中,您可以使用 \SplDoublyLinkedList 来完成此操作。 http://php.net/manual/en/class.spldoublylinkedlist.php

请注意,PHP 数组不是您在 C、C#、Java 等中看到的数组 - 它们是有序的 HashMap 。参见http://www.php.net/manual/en/language.types.array.php的介绍

根据您的用例(如果这不是家庭作业),\SplMaxHeap 不是 O(1),但可能是您的最佳选择。 http://php.net/manual/en/class.splmaxheap.php

关于php - 在 Ruby、Python 或 PHP 中,是否有一个插入到 Array 对象中间需要 O(1) 时间的操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10466938/

相关文章:

php - 如何在 PHP 中有效地搜索子数组?

python - 在当前工作目录中导入模块

Python - 从二维数组中获取值

Ruby Marshal.dump 对看起来相同的东西给出不同的结果

php - 存储国家代码而不仅仅是国家名称本身有哪些实际优势?

php - 文本转换 : Adding text according to previous occurrence

python:如何测试 @unittest.expectedFailure 的特定类型的错误?

ruby - Ruby 中的基准测试方法

ruby - 无法读取跨度元素

php - Sql – 在列的第一个空单元格中插入值并显示 ID