【问题标题】:best case and worst case time complexity for insertion in unsorted array插入未排序数组的最佳情况和最坏情况时间复杂度
【发布时间】:2017-11-12 04:37:32
【问题描述】:
我知道这是一个普遍的问题,但在我研究时间复杂度时,我确实需要澄清我的疑问。我确实尝试在此处发布之前查找它,但发现答案不一。
我的问题是,考虑到它未满,在未排序数组中插入项目时,复杂度将为 O(1),但如果已满,则复杂度为 O(n),因为我们需要将所有项目复制到新数组。那么我们是说在数组中插入的最佳情况复杂度是 O(1),最坏情况是 O(n),还是说最好和最坏情况都是 O(n)?
【问题讨论】:
标签:
arrays
time-complexity
big-o
【解决方案1】:
如果您必须将整个数组复制到一个更大的数组中,那么实际上最坏的情况插入是O(n)。但您必须记住,我们关心的是摊销成本。
这样想:我需要多久复制一次整个数组?一次在n 次。
所以对于n-1,我将支付O(1) 和最终插入O(n)。
总共 ~2n 用于 n 插入。平均 O(1) 每个操作。
也许您更容易将其视为O(2)。
现在要保持这一点,每次填充数组时,必须分配两倍的大小,因此对于您插入的每个项目,您可能需要为复制数组前半部分中相应项目的时间支付额外的 1 .