【发布时间】:2013-09-20 01:43:45
【问题描述】:
我们有一个大小为 L 的链表,我们想检索第 n 个到最后一个元素。
解决方案1:天真的解决方案
- 从头到尾进行第一次遍历以计算 L
- 第二次从头传到预期位置
解决方案2:使用2个指针p1,p2
- p1 从头开始迭代,p2 不动。
- 当 p1 和 p2 之间有
n元素时,p2 也开始迭代 - 当 p1 到达链表末尾时,p2 处于预期位置
两种解决方案似乎具有相同的时间复杂度(即 2L - n 对列表元素的迭代)
哪个更好?
【问题讨论】:
-
既然你没有定义“更好”,这里甚至没有问题。
-
人们需要了解,在许多情况下,“大 O”复杂度与实际性能仅松散相关,因为它忽略了加性因素和常数乘数。
-
解决方案一是 O(2n) => O(n),而解决方案二是 O(n)。两者都是线性的。但解决方案二听起来确实更便宜,但实际上可能是相同数量的操作。
标签: algorithm linked-list