【发布时间】:2009-07-21 09:28:23
【问题描述】:
在 this answer 的 cmets 中提出了一个想法,即反转简单链表只能在 O(nlog(n)) 时间内完成,而不是 O(n) 时间。
这绝对是错误的——O(n) 反转不是问题——只需遍历列表并随时更改指针。需要三个临时指针 - 这是恒定的额外内存。
我完全理解 O(nlog(n)) 比 O(n) 更差(慢)。
但出于好奇 - 用于反转简单链表的 O(nlog(n)) 算法可能是什么?具有恒定额外内存的算法更可取。
【问题讨论】:
-
按 O(n) 执行,但在
ith 节点上执行log(i)nops。 -
作为一个快速迂腐的吹毛求疵:您的
O(n)算法 是 一种O(n logN)算法,因此您的问题的一个答案是未修改的 O(n) 算法。O(n log n)是一组算法,其增长速度不超过 n log n,包括O(n)甚至O(1)。要限制在两个方向上相同的渐近边界,您需要说ϴ(n)。 (实际上,大多数人说O(n)时的意思是ϴ(n))
标签: algorithm language-agnostic list big-o