【问题标题】:Finding a node in singly linked list time complexity在单链表时间复杂度中查找节点
【发布时间】:2016-09-15 02:32:09
【问题描述】:

我在 DSA 课程期中考试中有这个问题:

考虑一个单链表包含 N 个节点(N > 8),一个方法 f1() 被设计为 从头开始查找第 8 个节点,方法 f2() 旨在从末尾找到第 8 个节点。 f1() 和 f2() 的时间复杂度是多少?

选择一个:

一个。 O(N) 和 O(N)

b. O(1) 和 O(1)

c。 O(1) 和 O(N)

d。 O(N) 和 O(1)

给出的正确答案是c。 O(1) 和 O(N)。但是我认为正确的答案是a。我知道如果 N = 8,从头开始找到第 8 个节点需要 O(1) 时间(只返回尾节点),但在这种情况下 N > 8。有人可以为我解释一下吗?

提前感谢您提供的任何帮助。

【问题讨论】:

  • 给出的答案是正确的,你不是。您需要多少次操作才能返回 1000 个节点中的第 8 个节点?超过 1000000?
  • c.是最正确的,但是一个。在技​​术上也是正确的,因为任何 O(1) 也是 O(N)。

标签: algorithm list data-structures linked-list singly-linked-list


【解决方案1】:

O(1) 意味着恒定的运行时间。换句话说,它不依赖于输入大小。

当您在此处应用该定义时,您可以看到获取第 8 个元素始终是一个恒定操作,与输入大小无关。这是因为,不管输入的大小(例如:10,100,100..),操作 get(8) 将始终花费相同的时间。此外,由于我们确定 n > 8,因此尝试获取第 8 个元素不会导致超出输入的大小。

【讨论】:

  • O(1) 并不意味着恒定的运行时间,也不意味着时间不取决于输入大小。相反,它意味着运行时间受一个常数的限制。
  • @PaulHankin 重点是试图让某人理解 O(1) 。我使用暗示这个词是有原因的。
  • 当然,但是对大 O 和复杂性存在很多误解,我认为好的答案不需要包含错误。也许:“O(1) 意味着程序永远不会花费超过固定的时间,无论输入如何。”
猜你喜欢
  • 2010-12-26
  • 1970-01-01
  • 1970-01-01
  • 2017-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多