【问题标题】:Time Complexity - Inserting an item in the middle of dynamic Array时间复杂度 - 在动态数组中间插入一个项目
【发布时间】:2015-07-03 20:49:55
【问题描述】:

我遇到了这个article,关于动态数组的时间复杂度,它澄清了很多。但是我有一个基于案例的问题。假设我有一个总共有 6 个元素的动态数组,并假设第 4 个元素被删除。在这种情况下,删除复杂度将是O(n-index),这将是O(6-4) = 2,因为最后两个元素只需要向上移动。它是否正确 ?我有文章给出了最坏情况的复杂性,说如果最上面的元素被删除,那么时间复杂度将是O(n)。我找不到任何关于从中心移除/插入项目的内容。

【问题讨论】:

    标签: data-structures big-o time-complexity dynamic-arrays


    【解决方案1】:

    您对需要移动的项目数量的分析是正确的。但是,在大 O 表示法中,这仍然是 O(n)。如果列表中有 n 个项目并从中间删除某些内容,则必须移动 *0.5 * n* 个项目。但是在处理 big-O 时,我们会丢弃任何常数乘数,所以这只是 O(n)

    【讨论】:

    • 我不确定你所说的
      是什么意思
      你是怎么得到 0.5 * n 的?
    • 好的,感谢您解决这个问题。在不忽略常数项的情况下,您将如何编写从总共 6 个元素中删除 4 个元素的时间复杂度?会是O(6 * 4/6) 吗?这会给我 4 这是我期望的错误 2
    • 谈论固定数量项目的复杂性没有意义。 Big-O 是关于时间的计算如何 changes 作为输入的大小 changes.. 对于您的问题(从 6 个数组中删除 4 个),可能意味着您总是删除最后 4 个项目,无论数组有多大,在这种情况下它是 O(1),或者这可能意味着您总是删除最后 2/3在这种情况下它是 O(n) 的数组,或者它可能意味着您总是删除除前两个项目之外的所有项目 (O(n)),等等.
    猜你喜欢
    • 1970-01-01
    • 2014-05-01
    • 2020-12-13
    • 1970-01-01
    • 1970-01-01
    • 2021-05-30
    • 2022-11-23
    • 2013-11-18
    • 1970-01-01
    相关资源
    最近更新 更多