首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在排序链表上应用二进制搜索O(log )?

如何在排序链表上应用二进制搜索O(log )?
EN

Stack Overflow用户
提问于 2011-03-12 14:43:02
回答 6查看 56K关注 0票数 40

最近,我遇到了一个关于链表的有趣问题。给出了排序的单链表,我们必须从这个链表中搜索一个元素。

时间复杂度不应超过O(log n)。这似乎需要我们在这个链表上应用二进制搜索。多么?由于链表不提供随机访问,如果我们尝试应用二进制搜索算法,它将达到O(n),因为我们需要找到链表的长度并进入中间。

有什么想法吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-03-12 17:45:45

对于简单的单链表,这肯定是不可能的。

草图证明:为了检查单链表的最后一个节点,我们必须通过归纳来执行跟随“k+1”指针证明的n-1操作,因为只有一个引用指向k+1的th节点,并且它在k的th节点中,并且需要一个操作来跟随它。对于某些输入,有必要检查最后一个节点(具体地说,如果搜索的元素等于或大于它的值)。因此,对于某些输入,所需时间与n成正比。

您要么需要更多时间,要么需要不同的数据结构。

请注意,您可以使用二进制搜索在O(log )比较中完成此操作。这只会花费更多的时间,所以只有在比较比列表遍历开销大得多的情况下,这个事实才是有意义的。

票数 43
EN

Stack Overflow用户

发布于 2011-03-12 14:48:23

您需要使用skip list。这对于普通的链表来说是不可能的(我真的很想知道普通链表是否可以做到这一点)。

票数 32
EN

Stack Overflow用户

发布于 2016-05-25 00:50:24

在链表中,二分查找的复杂度可能不是O(log ),但通过使用双指针方法可以实现最小的复杂度,如本文所述:http://www.ijcsit.com/docs/Volume%205/vol5issue02/ijcsit20140502215.pdf

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5281053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档