动态数组保证说明

时间:2018-09-09 16:38:16

标签: arrays dynamic

在Skiena的算法设计手册中,他曾提到:

The primary thing lost using dynamic arrays is the guarantee that each array
access takes constant time in the worst case. Now all the queries will be fast, except
for those relatively few queries triggering array doubling. What we get instead is a
promise that the nth array access will be completed quickly enough that the total
effort expended so far will still be O(n).

我正在努力理解这一点。数组查询将如何扩展数组?

1 个答案:

答案 0 :(得分:0)

动态数组是不需要指定大小的数组(以Java中的ArrayList为例)。在后台,动态数组是使用常规数组实现的。但是,由于它是常规数组,因此ArrayList的实现需要指定基础数组的大小。

因此,在动态数组中处理此问题的典型方法是用一定数量的元素初始化标准数组,然后在达到最大元素数时,将数组的大小加倍。

由于具有这种底层功能,因此在大多数情况下,添加到动态数组中需要花费固定时间,但是偶尔它会将“幕后”标准数组的大小增加一倍,而这将花费比正常添加时间更长的时间

如果您对“查询”一词的使用感到困惑,我相信他的意思是说“从数组中添加或删除”,因为简单的“获取”查询不应与基础标准数组大小相关。