【问题标题】:Accounting for time complexity of array insertion考虑数组插入的时间复杂度
【发布时间】:2020-03-05 23:57:34
【问题描述】:

给定一个数组上的插入排序,您在其中进行 O(n) 比较以找到要插入的索引,然后插入,时间复杂度是否为 O(n^3)?

因为对于每个元素 (n),您遍历排序列表 (n),然后插入 (n)。

据我了解,正常的实现没有任何插入,只有交换将其减少到 O(n^2),因为项目通过交换而不是插入放置在正确的位置。

O(n^3) 插入排序的伪代码:

for element in array
    find the correct location
    then insert in the correct location

【问题讨论】:

    标签: sorting big-o complexity-theory insertion-sort


    【解决方案1】:

    您已经非常接近正确答案了,但这里的正确时间限制是 O(n2)。

    您是正确的,您必须访问数组的每个元素,因此您将要做 O(n) 次。那是什么东西?正如您所指出的,您首先找到插入点(这需要时间 O(n)),然后向下移动以腾出空间(这也需要时间 O(n))。这意味着每个元素所做的工作是 O(n) + O(n) = O(n)。在您的分析中,您将这两个 O(n) 项相乘,这就是您高估总数的原因。

    总的来说,你做了 O(n) 次工作 O(n) 次,所以完成的总工作量的一个好的上限是 O(n2)。

    【讨论】:

      【解决方案2】:

      您非常接近得到正确答案,但这里正确的时间限制是 O(n2)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-31
        • 2022-11-23
        • 1970-01-01
        • 2021-05-30
        • 2013-11-18
        • 1970-01-01
        相关资源
        最近更新 更多