【问题标题】:Data Structure: Best and worst running time of an algorithm数据结构:算法的最佳和最差运行时间
【发布时间】:2018-08-12 14:39:06
【问题描述】:

我对哪个选项正确以及为什么正确感到困惑。所以这里有一些问题:

  1. 从单链表的最后一个位置删除一个节点的最佳运行时间是多少。

    • (a) O(1)
    • (b) Ω(n)
    • (c) O(log n)
    • (d) Θ(n2)

    我的想法:
    我认为b中的解决方案?因为,我知道当你删除链表的最后一个元素时,它是 O(n),因为你必须遍历链表的所有元素。

  2. 在双向链表中实现的将元素压入堆栈的最坏情况下的运行时间是多少?

    • (a) O(1)
    • (b) 问(8)
    • (c) O(n log n)
    • (d) Ω(n)

    我的想法:
    我认为解决方案是 d,因为将元素插入链表的大哦是 O(n) ,其中 n 是您要插入的元素数。

我真的对这个话题感到困惑,如果有人可以修改我的解决方案并理解为什么他们的解决方案是正确的,那么我将不胜感激。谢谢。

【问题讨论】:

    标签: performance time big-o singly-linked-list doubly-linked-list


    【解决方案1】:

    第一个你是对的。为了删除最后一个元素,您需要遍历列表并修改那里的指针,使其为 Ω(n)。

    然而在第二个中它是 O(1)。堆栈是 LIFO。您有一个指向堆栈头部的指针。您需要做的就是为新元素创建一个节点,使其成为当前头部的下一个并将头部设置为新创建的头部。因此,操作的数量不是堆栈大小的函数。它可以在 O(1) 的恒定时间内完成。

    编辑:上面的答案假设数据结构没有用一些数组实现来实现,由于调整大小,这可能再次是 O(n)。

    【讨论】:

    • 所以 2 的答案是?还是 d?
    • 答案是 D,因为它说的是一个双向链接列表。如果我的编辑引起了混乱,我深表歉意,但我相信最好是准确的。希望对您有所帮助。
    猜你喜欢
    • 2012-03-22
    • 1970-01-01
    • 2013-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    • 2018-11-16
    相关资源
    最近更新 更多