再送你6本奇书!

编程技术宇宙

共 955字,需浏览 2分钟

 ·

2021-07-04 16:38



—————  第二天  —————





如何进行二分查找呢?


首先根据数组下标,定位到数组的中间元素:



由于要查找的元素20,大于中间元素12,再次定位到数组半部分的中间元素:



这一次定位到的元素正好是20,查找成功。


如果数组的长度是n,二分查找的时间复杂度是O(logn),比起从左到右逐个遍历元素进行查找的方式,大大提升了查找性能。







如上图所示,想要定位到链表的中间结点9,是无法直接定位的,需要从头结点开始,顺着next指针,逐个访问下一个结点。


因此,链表这种数据结构并不适用于二分查找。



————————————


常见的图书目录,就像下面这样:



第5章对应的页码是170,因此我们直接翻到书的第170页,就是第5章的内容。




如图所示,在原始链表的基础上,我们增加了一个索引链表。原始链表的每两个结点,有一个结点也在索引链表当中。


这样做有什么好处呢?当我们想要定位到结点20,我们不需要在原始链表中一个一个结点访问,而是首先访问索引链表:



在索引链表找到结点20之后,我们顺着索引链表的结点向下,找到原始链表的结点20:



这个过程,就像是先查阅了图书的目录,再翻到章节所对应的页码。


由于索引链表的结点个数是原始链表的一半,查找结点所需的访问次数也相应减少了一半。



你知道这个问题的答案吗?


上面的漫画出自算法大佬小灰的作品《漫画算法2》中,问题的答案可以在这本书中找到,像这样漫画讲解算法的文章,小灰哥写了许多,他的第一部作品《漫画算法》就曾创下过编程类书籍的销量神话


不久前,小灰的《漫画算法2》终于正式上市了:


好消息是,我跟出版社的小姐姐说了不少好话,她答应送我 本书送给读者。


欢迎大家在评论区留言,说出想要这本书的理由,我将放出有诚意的留言,48小时内点赞数最高的前六名获得送书哦


哦对了,为了防止羊毛党,本次送书只限发文前已关注的朋友。新看到的朋友不要走开,顺手点个关注,下周再送另外的书,还有机会哈。


点个[在看],是对我最大的支持!


浏览 39
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报