数据结构:算法的最佳和最差运行时间

问题描述 投票:0回答:1

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

  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个回答
0
投票

首先你是对的。为了删除最后一个元素,你需要遍历列表并修改指针,因此它是Ω(n)。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.