PHP的arrays是复杂的野兽;它们允许像普通哈希表一样快速查找,但它们的键值对也是有序的。将元素插入此结构的时间成本如何随着现有元素数量的增加而变化?
时间复杂度是否取决于我将元素插入数组的确切方式?例如,执行以下每个操作:
array_unshift($array, $value);
array_push($array, $value);
array['some_new_key'] = $value;
具有相同的时间复杂度,还是时间复杂度不同?
答案 0 :(得分:4)
array_push
是常量时间(类似哈希表的队列函数),但有趣的是,这是性能方面的:
array_push();
$array[] = $val;
后一种方法比array_push
更快,因为无需为开销函数调用付费。
绝对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")它必须洗牌整个数组来处理排序