二分查找法-Python学习

简介: 简介:二分查找法,也叫折半查找法。是计算机中最基本、最有用的基础算法之一。它讲述的是在有序的集合中搜索特定目标的过程。

简介:二分查找法,也叫折半查找法。是计算机中最基本、最有用的基础算法之一。它讲述的是在有序的集合中搜索特定目标的过程。

实现方法:首先将序列进行排序,将中间位置的值与目标值进行比较,如果相等,则查找成功;如果不等,则根据记录到的中间位置将序列分成前后两个子序列,比较目标值与中间位置值的大小,判断目标值所在的子序列,继续查找该序列,舍弃另外一个子序列。重复以上过程,直到查找成功,或者子序列不存在的时则表示目标值查找不成功。

二分查找法一般分成三个步骤:

1、预处理阶段:主要是对原集合进行预处理。例如数列是无序的,需要先进行排序。

2、查找阶段:使用递归或者循环的方式,把查找的空间划分成两半。

3、后处理阶段:清除掉不符合需求的一半,在剩余的一半空间中确定可行的候选者。

二分法模板:基于对左、中、右索引的分配,以及终止条件和后处理的不同,可以总结出以下三个简易模板。

基础模板一:

初始条件:left=0, right=length-1

终止条件:left>right

向左查找:right=mid-1

向右查找:left=mid+1

说明:基础模板,不需要与查找元素两侧进行比较来确定查找条件,也不需要后处理操作。到达末尾没找到,则说明数列中没有目标值。

基础模板二:

初始条件:left=0, right=length-1

终止条件:left+1==right

向左查找:right=mid

向右查找:left=mid

说明:需要使用搜索元素的左右邻居来确定查找方向是向左还是向右,因此它需要保证空间的每个步骤内至少有3个元素。当剩余2个元素的时候结束循环或者递归,而且还需要判断这2个元素是否符合条件。

基础模板三:

初始条件:left=0, right=length

终止条件:left==right

向左查找:right=mid

向右查找:left=mid+1

说明:需要使用搜索元素的右邻居来确定查找方向是向左还是向右,因此它需要保证空间的每个步骤内至少有2个元素。当剩余1个元素的时候结束循环或者递归,而且还需要判断这个元素是否符合条件。

时间复杂度:O(logn)

空间复杂度:O(1)

相关文章
|
2月前
|
程序员 测试技术 开发工具
豆瓣评分7.9!世界级讲师耗时5年整理出的Python学习手册!
Python是一门流行的开源编程语言,广泛用于各个领域的独立程序与脚本化应用中。它不仅免费、可移植、功能强大,同时相对简单,而且使用起来充满乐趣。从软件业界的任意一角到来的程序员,都会发现Python着眼于开发者的生产效率以及软件质量,因此无论你的项目是大还是小,选择Python都将带来战略性的优势。 今天给小伙伴们分享的这份手册讲述了完整的Python语言,力争满足“语言”和“原理”两个方面的需求,并拥有足够的深度以便实用。废话不多说,下面展示给大家。
|
2月前
|
数据采集 数据可视化 Ruby
GitHub星标破万!Python学习教程(超详细),真的太强了!
Python 是一门初学者友好的编程语言,想要完全掌握它,你不必花上太多的时间和精力。 Python 的设计哲学之一就是简单易学,体现在两个方面: 1. 语法简洁明了:相对 Ruby 和 Perl,它的语法特性不多不少,大多数都很简单直接,不玩儿玄学。 2. 切入点很多:Python 可以让你可以做很多事情,科学计算和数据分析、爬虫、Web 网站、游戏、命令行实用工具等等等等,总有一个是你感兴趣并且愿意投入时间的。
|
2月前
|
机器学习/深度学习 开发者 Python
Python 与 R 在机器学习入门中的学习曲线差异
【8月更文第6天】在机器学习领域,Python 和 R 是两种非常流行的编程语言。Python 以其简洁的语法和广泛的社区支持著称,而 R 则以其强大的统计功能和数据分析能力受到青睐。本文将探讨这两种语言在机器学习入门阶段的学习曲线差异,并通过构建一个简单的线性回归模型来比较它们的体验。
51 7
|
2月前
|
JSON API 开发者
Python学习Get方式通过商品 ID请求 获取拼多多商品详情数据接口
拼多多商品详情数据接口服务使开发者或商家能编程获取平台商品详情,涵盖标题、价格、销量等关键信息,助力市场分析与决策。使用前需注册开发者账号并获取API密钥;构造含商品ID等参数的请求URL后发送至API服务器;接口以JSON格式返回数据。应用场景包括商品销售分析、选品、品牌口碑挖掘及竞品分析,为商家提供强大数据支持。
|
2月前
|
算法 数据挖掘 大数据
深入学习Python的性能优化
【8月更文挑战第9天】深入学习Python性能优化涵盖设定明确目标、运用timeit与cProfile等工具诊断瓶颈、优化代码结构与算法、采用并行/并发技术、利用生成器与第三方库等策略。这是一个持续学习的过程,旨在全面提升代码效率与响应速度。
31 1
|
3月前
|
机器学习/深度学习 搜索推荐 TensorFlow
使用Python实现深度学习模型:智能教育与个性化学习
【7月更文挑战第29天】 使用Python实现深度学习模型:智能教育与个性化学习
125 9
|
2月前
|
数据采集 人工智能 数据可视化
【2023年电工杯竞赛】B题 人工智能对大学生学习影响的评价 数学建模方案和python代码
本文介绍了2023年电工杯竞赛B题的数学建模方案和Python代码实现,详细阐述了如何分析调查问卷数据,建立评价指标体系,构建数学模型评估人工智能对大学生学习的影响,并提供了数据预处理、特征编码、可视化分析等代码示例。
40 0
【2023年电工杯竞赛】B题 人工智能对大学生学习影响的评价 数学建模方案和python代码
|
2月前
|
存储 JSON 测试技术
Python中最值得学习的第三方JSON库
Python中最值得学习的第三方JSON库
|
2月前
|
机器学习/深度学习 人工智能 TensorFlow
神经网络不再是黑魔法!Python带你一步步拆解,让AI学习看得见
【8月更文挑战第3天】神经网络,曾被视为难以触及的黑魔法,现已在Python的助力下变得平易近人。以TensorFlow或PyTorch为“魔法杖”,仅需几行Python代码即可构建强大的AI模型。从零开始,我们将教导AI识别手写数字,利用经典的MNIST数据集。通过数据加载、预处理至模型训练与评估,每个步骤都如精心编排的舞蹈般清晰可见。随着训练深入,AI逐渐学会辨认每个数字,其学习过程直观展现。这不仅揭示了神经网络的奥秘,更证明了任何人都能借助Python创造AI奇迹,共同探索未来的无限可能。
36 2
|
3月前
|
Ubuntu IDE Linux
Python学习安装 Python
【7月更文挑战第26天】
35 3
下一篇
无影云桌面