【发布时间】:2013-11-02 11:51:12
【问题描述】:
This earlier question 谈论在 O(n) 时间内对双向链表进行二进制搜索。该答案中的算法如下工作:
- 转到列表中间进行第一次比较。
- 如果它等于我们正在寻找的元素,我们就完成了。
- 如果它比我们要查找的元素大,请向后走到起点的一半并重复。
- 如果它比我们要查找的元素小,则向前走一半到起点并重复。
这对于 双向 链表非常有效,因为它可以向前和向后移动,但该算法不适用于单链表。
是否有可能在 O(n) 时间内对单链表而不是双向链表进行二分查找?
【问题讨论】:
-
我读过它,在这种情况下,很明显,回答问题的意思是:“如果您提出问题然后找到解决方案,请随时回答该问题。”绝对没有这样的:“如果您已经知道答案,请创建问题,然后立即回答问题。”
-
@libik-“提问页面”上有一个明确的复选框,专门允许您同时提问和回答问题。我几乎肯定这是专为此类情况设计的,尽管我可能是错的。
-
这有什么意义?线性搜索是O(n),所以如果你的二分搜索也是O(n),那么复杂度是一样的。
-
@Barmar 的优点是,就像下面 cmets 中提到的 templatetypedef,在比较非常昂贵的情况下,比遍历列表要多得多。
-
@templatetypedef 不难看出你是个好人而且你的意图是好的。请忽略“背景噪音”;)
标签: algorithm data-structures linked-list big-o binary-search