将元素添加到数组的时间复杂度是什么?

时间:2015-11-02 17:24:36

标签: php time-complexity

PHP的arrays是复杂的野兽;它们允许像普通哈希表一样快速查找,但它们的键值对也是有序的。将元素插入此结构的时间成本如何随着现有元素数量的增加而变化?

时间复杂度是否取决于我将元素插入数组的确切方式?例如,执行以下每个操作:

array_unshift($array, $value);
array_push($array, $value);
array['some_new_key'] = $value;

具有相同的时间复杂度,还是时间复杂度不同?

2 个答案:

答案 0 :(得分:4)

恒定时间O(1)

array_push是常量时间(类似哈希表的队列函数),但有趣的是,这是性能方面的:

array_push();
$array[] = $val;

后一种方法比array_push更快,因为无需为开销函数调用付费。

线性时间O(n)

绝对array_push和相关的队列函数比array_unshift快得多。是的,他们都预先形成相同的功能,但以不同的方式实现这一目标。正如您已经指出的那样,PHP的数组非常强大,并提供强大的功能。这是有代价的,因为PHP的数组有订购的密钥,你需要支付额外的费用来重新索引所有这些密钥,所以O(n)。然后,array_unshift将采用数组的线性时间+常量时间将值附加到数组的头部,因此类似于O(n + cn'),其中c是常量时间在数组中添加一个元素并且n'是要添加的项目数。

答案 1 :(得分:3)

array_push($array, $value);

array['some_new_key'] = $value;

都是O(1)

array_unshift($array, $value);

是O(n)因为(改变" head")它必须洗牌整个数组来处理排序