【问题标题】:Big O of list resize列表调整大小的大 O
【发布时间】:2017-12-28 19:19:36
【问题描述】:

这个问题适用于所有语言,但让我坚持 C#

var names = new List<string> {"Jerry", "Cosmo", "Elaine", "George"};

这是我的编译时间列表。如果我决定在其中插入记录,那么下面的 .Net 会将长度从 4 加倍到 8。

names.Insert("Newman");

上面这个插入方法的Big-O会变成O(N)吗?其中 N 作为列表的长度?如果是,大多数面试官真的关心吗?

编辑

假设我们要插入 1000 条记录。长度将在 4、8、16、32 处加倍......所以插入复杂度将是 Log(N) 正确的吗?

【问题讨论】:

    标签: c# algorithm big-o


    【解决方案1】:

    特定插入操作(列表大小翻倍)的复杂度为 O(N)。 但是摊销复杂度仍然是 O(1),因为之前的 N / 2 元素列表的大小没有翻倍,所以 平均 每次插入的操作数仍然是恒定的。面试官可能希望您意识到这种差异。

    【讨论】:

    • hmm.. 那是为了触发我的想法.. 所以假设我们要插入 1000 条记录.. 长度将在 4、8、16、32 处加倍.. 所以复杂度将是 Log(N ) 对吗?
    • @om471987 不,size-doubling操作的次数是O(log(N)),但是每次size加倍操作是O(N)。所以你有一个几何级数 N + N / 2 + N / 4 + N / 8 ... 对于 log(N) 项,它仍然收敛 O(N)
    猜你喜欢
    • 2016-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多