python二分查找的原理
- 更新时间:2021-06-20 09:00:19
- 编辑:谢翠风
给网友朋友们带来一篇相关的编程文章,网友衡烨华根据主题投稿了本篇教程内容,涉及到Python相关内容,已被137网友关注,下面的电子资料对本篇知识点有更加详尽的解释。
参考资料
- Python数据科学导论 PDF 电子书 / 110.6 MB / 戴维 推荐度:
- 《精通Python自然语言处理》配套资源 配套资源 / 222.83 KB / [印度] Deepti Chopra, 推荐度:
- Python网络爬虫从入门到实践 PDF 电子书 / 154.1 MB / 唐松/陈智铨 推荐度:
- Python数据抓取技术与实战 PDF 电子书 / 59.3 MB / 潘庆和,赵星驰 推荐度:
- Python程序员面试算法宝典 PDF 电子书 / 200.9 MB / 张波 推荐度:
正文内容
无意中在网上看到《python二分查找的原理》,知识点总结的很细,重新排版了一下发到这里,为了大家阅读方便。
1、原理
首先,假设表中的要素按升序排列,将表中间位置记录的关键词与检索关键词进行比较,如果两者相等,则检索成功
否则,利用中间位置记录将表分为前后两个子表,如果中间位置记录的关键词大于搜索关键词,则进一步搜索前一个子表,否则进一步搜索后一个子表。重复以上流程,找到符合条件的记录,使检索成功,或者在子表不存在之前,此时检索不成功。
2、实例
""" 应用前提:在一个含有n个元素的有序序列中定位目标值 时间复杂度:O(logn) 该算法维持两个参数low和high,这样可使所有候选条目的索引位于low和high之间。首先, low=0和high=n-1。然后我们比较目标值和中间值候选项,即索引项[mid]的数据。 mid =L(low + high)/2 ]考虑以下三种情况: - 如果目标值等于[mid]的数据, 然后找到正在寻找的值,则查找成功并且终止。 - 如果目标值< [mid] 的数据, 对前半部分序列重复这一过程,即索引的范围从low到mid-1. - 如果目标值> [mid] 的数据,对后半部分序列重复这一过程,即索的范围从mid+1到high。 - 如果low >high,说明索引范围[low, high]为空,则查找不成功。该算法被称为二分查找 """ def binary_search(alist, item): """非递归""" first = 0 last = len(alist) - 1 found = False while first <= last and not found: mid = (first + last) // 2 if alist[mid] == item: found = True else: if item < alist[mid]: last = mid - 1 else: first = mid + 1 return found def binary_search_recursion(alist, item): if len(alist) > 0: mid = len(alist) // 2 if alist[mid] == item: return True elif item < alist[mid]: return binary_search_recursion(alist[:mid], item) else: return binary_search_recursion(alist[mid + 1:], item) return False if __name__ == '__main__': ret = binary_search_recursion([17, 20, 26, 31, 44, 54, 55, 65, 77, 69], 26) print(ret) ret = binary_search([17, 20, 26, 31, 44, 54, 55, 65, 77, 69], 68) print(ret)
以上就是python二分查找的原理,希望对大家有所帮助。
相关教程
-
python如何派生内置不可变类型并修改实例化行为
这篇文章主要为大家详细介绍了python如何派生内置不可变类型并修改实例化行为,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
发布时间:2019-08-26
-
Python 中的参数传递、返回值、浅拷贝、深拷贝
这篇文章主要介绍了Python 中的参数传递、返回值、浅拷贝、深拷贝,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
发布时间:2019-09-09