我刚遇到这个问题,如果我们有一个动态分配的数组,则需要O(1)才能进行插入。但是当数组已满时,我们需要为数组重新分配双空格,因此复制旧数组需要O(n)。
我们有什么方法可以做到O(1)?
我已经阅读了一些关于可扩展阵列的文章,但我并不安静地理解它。任何人都可以帮忙解释一下吗?
非常感谢。
答案 0 :(得分:4)
每次分配双倍空间形成几何级数。这意味着虽然一些插入(触发扩展的插入)非常昂贵,但它们很少发生,因此摊销的性能仍然是O(1)。例如,插入十亿个元素只需要30次加倍(2 ^ 30 = 1,073,741,824)。