关于resizing-array实现:为什么当四分之一满时将数组缩小到一半大小?

时间:2016-10-14 15:31:31

标签: arrays

教科书(Sedgewick和Wayne,Algorithms(第4版))说,为了缩小数组,我们可以有效地将数组s []的大小减半,当它是四分之一满时而不是半满。但我不知道它是如何运作的?

要从数组中删除元素,为什么我不能将其余元素复制到新数组中?任何人都可以告诉我这个"将数组的大小减半[]"来自?出于什么目的?和四分之一满和半满的效率差异?

非常感谢!!!

1 个答案:

答案 0 :(得分:1)

收缩半满的数组后,我们假设添加了一个新元素。数组将被扩展(2)并将再次变为半满...

此后,如果删除了一个元素,将再次收缩。

所以这么简单的例子,当在一个循环中添加一个元素然后被删除会产生非常糟糕的性能。

解决方案是在单引号时收缩。