【发布时间】:2017-11-13 16:23:40
【问题描述】:
如果我们有一个包含 N 个元素的排序数组,并且我们希望执行 N 个插入操作,那么最佳方法的最坏情况时间复杂度应该是多少?
我认为它应该是 O(N log(2N)) 因为我们可以直接在排序数组的末尾插入 N 个元素。在所有插入之后,我们将有 2N 个元素,我们可以对整个 2N 数组执行稳定的排序算法,这需要 O(2N log(2N)) ~ O(N log(2N))
所以,总共 = N 次插入 + 排序 = O(N + 2N log(2N)) = O(N log(2N))
但是在我看到相关概念的任何地方,它都被给出为 O(N^2),因为它们通过在排序后的数组之间为每次插入留出空间来保持数组在每次插入之后排序!
我的方法错了吗?我们是否必须在每次插入后保持排序数组的排序?如果是,那么这个“在每次操作后保持数据结构不变,而不是在一系列相同的操作后保持不变”规则对所有数据结构都有效吗?!
【问题讨论】:
-
我们是否必须在每次插入后保持排序后的数组排序?我不知道。要求说什么?而且,不,并非所有有序数据结构都具有相同的规则。例如,平衡二叉搜索树允许您在 O(log n) 中进行插入。
标签: arrays data-structures time-complexity