我知道这是一个普遍的问题,但在我研究时间复杂性时,我确实需要清除疑点。在发布此处之前我确实试过查找,但发现了混合的答案。
我的问题是,当在未排序的数组中插入项目时,考虑到它不满,复杂性将是O(1)但是如果它已满,那么它将是O(n),因为我们需要将所有项目复制到新阵列。那么我们会说在数组中插入的最佳案例复杂度是O(1),最坏的情况是O(n)还是我们应该说最好和最坏情况都是O(n)?
答案 0 :(得分:1)
如果你必须将整个数组复制到一个更大的数组中,那么最坏情况插入是O(n)
。但你必须记住,这是我们关心的摊还成本。
以这种方式思考:我经常需要复制整个阵列吗?进入n
次。
因此,对于n-1
,我将支付O(1)
和最终插入O(n)
。
~2n
插入总共n
。每个操作的平均O(1)
。
也许您更容易将其视为O(2)
。
现在要保持这一点,每次填充数组时,必须分配两倍的大小,因此对于您插入的每个项目,您需要额外支付1,因为您可能需要在数组的前半部分复制相应的项目