[数据结构与算法] Python实现二分查找
Posted 机器学习和数学
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[数据结构与算法] Python实现二分查找相关的知识,希望对你有一定的参考价值。
[点击蓝字,一键关注~]
可能有人会问,学习机器学习还要不要学习数据结构,知乎上有个帖子,对这个问题有很多讨论,但是答案基本都是一致的,要学!但是这块其实我掌握的并不好,本科的数据结构就没学好,后来就没学了,直到去年有段时间打算恶补一下,买了《数据结构和算法 python语言实现》,书写的挺好的,就是看着头疼,基本概念可以看懂,就是实现起来不是很明白。然后后来就去实习了,在公司做的是深度学习的东西,根本用不到,所以好久不看就又忘记了,唉,也是醉了。最近各大互联网公司都开始秋招了,如果是做算法方向的,基本笔试题都会涉及数据结构,我参加了几家公司的笔试,简直被虐的不要太惨。。。 所以也是提醒以后打算找算法方面的工作的童鞋,把基础打好。不管是机器学习还是深度学习,数据分析,大数据挖掘之类的工作就更不用说了,肯定是要考的。
今天说一下二分查找,后面还会有数据结构的相关总结,这样也逼自己好好学一下,理解不好地方,希望大家可以多多指正。
二分查找是一个用的非常多的查找算法,目的是从一个列表list里面,找到一个你想要的数,记做目标数据,返回这个数的索引,比如[5, 12, 3], 想找到12在哪,然后答案应该是1。直接的方法是从头开始,一个个比较,如果相等就返回,先拿5和12比, 不相等就继续下一个,12 = 12, 所以返回1,但是如果这个列表很大, 这样查找起来就比较慢,时间复杂度是O(n),而二分查找是一个比较高效的查找方法,数学里面学过二分法,我觉得道理是类似的。二分查找的时间复杂度是O(logn)。
二分查找的一般过程为先找到数组的中间数据,然后对比目标数据和中间数据,如果相等则返回中间数据,如果目标数据大于中间数据,则继续在列表的右边按照相同方法去寻找。否则在左边寻找;这里要注意的是,查找过程中的列表是经过排序以后的,所以这里比较的时候才会按大小去搜索。
下面是用Python实现二分查找的一个栗子
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()
二分查找就到这里,二分查找也有很多别的实现,有机会再试试。
以上是关于[数据结构与算法] Python实现二分查找的主要内容,如果未能解决你的问题,请参考以下文章