python实现二分查找算法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python实现二分查找算法相关的知识,希望对你有一定的参考价值。

参考技术A 二分查找算法,是常见的搜索算法之一,适用于有序的序列,通过将序列不断的对折分为区间,从而确定查找值是否存在,优点是速度快。

首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

使用python递归实现其算法:

二分查找是应用在数据量较大的场景中,如一些图片的RGB数组操作中,典型的是在滑块验证中使用二分法来确定最佳距离。

[数据结构与算法] 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实现二分查找算法的主要内容,如果未能解决你的问题,请参考以下文章

Python 3 二分查找算法实现

python算法:二分查找

两种方法实现Python二分查找算法

图解二分查找算法 -- python实现

最简单的方法实现 Python数组二分查找算法

python几种排序算法和二分查找方法的实现