前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[数据结构与算法] Python实现二分查找

[数据结构与算法] Python实现二分查找

作者头像
用户1622570
发布2018-04-12 09:24:29
8720
发布2018-04-12 09:24:29
举报
文章被收录于专栏:机器学习和数学

可能有人会问,学习机器学习还要不要学习数据结构,知乎上有个帖子,对这个问题有很多讨论,但是答案基本都是一致的,要学!但是这块其实我掌握的并不好,本科的数据结构就没学好,后来就没学了,直到去年有段时间打算恶补一下,买了《数据结构和算法 python语言实现》,书写的挺好的,就是看着头疼,基本概念可以看懂,就是实现起来不是很明白。然后后来就去实习了,在公司做的是深度学习的东西,根本用不到,所以好久不看就又忘记了,唉,也是醉了。最近各大互联网公司都开始秋招了,如果是做算法方向的,基本笔试题都会涉及数据结构,我参加了几家公司的笔试,简直被虐的不要太惨。。。 所以也是提醒以后打算找算法方面的工作的童鞋,把基础打好。不管是机器学习还是深度学习,数据分析,大数据挖掘之类的工作就更不用说了,肯定是要考的。

今天说一下二分查找,后面还会有数据结构的相关总结,这样也逼自己好好学一下,理解不好地方,希望大家可以多多指正。

二分查找是一个用的非常多的查找算法,目的是从一个列表list里面,找到一个你想要的数,记做目标数据,返回这个数的索引,比如[5, 12, 3], 想找到12在哪,然后答案应该是1。直接的方法是从头开始,一个个比较,如果相等就返回,先拿5和12比, 不相等就继续下一个,12 = 12, 所以返回1,但是如果这个列表很大, 这样查找起来就比较慢,时间复杂度是O(n),而二分查找是一个比较高效的查找方法,数学里面学过二分法,我觉得道理是类似的。二分查找的时间复杂度是O(logn)。

二分查找的一般过程为先找到数组的中间数据,然后对比目标数据和中间数据,如果相等则返回中间数据,如果目标数据大于中间数据,则继续在列表的右边按照相同方法去寻找。否则在左边寻找;这里要注意的是,查找过程中的列表是经过排序以后的,所以这里比较的时候才会按大小去搜索。

下面是用Python实现二分查找的一个栗子

代码语言:javascript
复制
def binary_search(array, query_value):
    low, high = 0, len(array) - 1
    while low <= high:
        mid = low + (high - low) // 2
        mid_val = array[mid]
        if mid_val == query_value:
            return mid
        elif mid_val < query_value:
            low = mid + 1
        else:
            high = mid - 1
    return None


def main():
    array_1 = [1, 10, 20, 30, 180]
    print binary_search(array_1, 20)
    print "- * - " * 5
    array_2 = [2, 1, 3, 3, 5, 4, 1, 6]
    sorted_array = sorted(array_2)
    print "sorted_array : ", sorted_array
    print(binary_search(sorted_array, 5))


if __name__ == "__main__":
    main()

二分查找就到这里,二分查找也有很多别的实现,有机会再试试。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-08-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习和数学 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档