Pythonic版二分查找
[本文出自天外归云的博客园]
前提:升序数组,待查元素在数组中。
二分查找:就是一个递归函数c。待查元素a,当前数组中位数b,如果b=a则返回b的索引,b>a则在b左侧的子数组中调用函数c,否则在b右侧子数组中调用函数c。
第一次思考,按着上面的思路编程后的结果:
def binary_search(index, a, value):if a[(len(a) - 1) // 2] == value:return index + (len(a) - 1) // 2elif a[(len(a) - 1) // 2] < value:return binary_search(index + (len(a) - 1) // 2 + 1, a[(len(a) - 1) // 2 + 1:], value)else:return binary_search(index, a[0:(len(a) - 1) // 2 + 1], value)
第二次思考,简化中位数计算逻辑:
def binary_search(index, a, value):if a[len(a) // 2] == value:return index + len(a) // 2elif a[len(a) // 2] < value:return binary_search(index + len(a) // 2, a[len(a) // 2:], value)else:return binary_search(index, a[0:len(a) // 2], value)
第三次思考,去掉return,改为lambda形式:
binary_search = lambda index,a,value: index + len(a) // 2 if a[len(a) // 2] == value else binary_search(index + len(a) // 2, a[len(a) // 2:], value) if a[len(a) // 2] < value else binary_search(index, a[0:len(a) // 2], value)
以上就是二分查找变为“一行代码”版的过程。
运行测试:
if __name__ == '__main__':a = [1, 2, 33, 43, 52, 66, 88, 99, 111, 120]print(f"Target index: {binary_search(0, a, value=33)}")
结果如下:
Pythonic版二分查找相关推荐
- swift版 二分查找 (折半查找)
二分查找作为一种常见的查找方法,将原本是线性时间提升到了对数时间范围之内,大大缩短了搜索时间,但它有一个前提,就是必须在有序数据中进行查找.废话少说,直接上代码,可复制粘贴直接出结果! import ...
- LintCode 1692. 组队打怪(田忌赛马,二分查找)
1. 题目 你现在有n个英雄,每个英雄的战斗力为 atk1,你要用这些英雄去对付n个怪物,每个怪物的战斗力为atk2. 在一场战斗中,你需要安排每个英雄分别与一个怪兽战斗,如果英雄战斗力高于怪兽,那个 ...
- 算法2(二分查找法)
使用二分查找法的前置条件 必须是一个已经排好序的数组 二分查找定义 从有序列表的候选区data[0:n]开始,通过对待查找的值与候选区中间值的比较,可以使候选区减少一半. 示例图 循环版二分查找法 d ...
- 数据结构与算法《二分查找》
数据结构与算法(java)<二分查找> 基本二分查找public class BinarySearch {/*** 1.定义一个有序数组,* 2.定义两个变量i,j* 3.定义一个待查找的 ...
- 常用十大算法 非递归二分查找、分治法、动态规划、贪心算法、回溯算法(骑士周游为例)、KMP、最小生成树算法:Prim、Kruskal、最短路径算法:Dijkstra、Floyd。
十大算法 学完数据结构该学什么?当然是来巩固算法,下面介绍了十中比较常用的算法,希望能帮到大家. 包括:非递归二分查找.分治法.动态规划.贪心算法.回溯算法(骑士周游为例).KMP.最小生成树算法:P ...
- 二分查找——细节决定成败
本文内容参考如下 详解二分查找算法 感谢这位大神的学习分享 二分查找仿佛是个知道编程的人都听说过的算法,思路非常简单,菜鸟在前文中也有说过,但却对降低顺序查找的时间复杂度有奇效.在做题的过程中,发现二 ...
- 1.1.10 从二分查找BinarySearch开启算法学习之路---《java算法第四版》
文章目录 0.前言 1.功能 2.示例 有两个名单tinyW.txt和tinyT.txt,将tinyT.txt名单中不在tinyW.txt的数据打印出来 ① 实现原理 ② 实现代码 ③ 性能分析 0. ...
- php折半查找算法,二分查找 [折半查找] 算法 PHP 版
查找表:就是同一类型的数据元素构成的数据集合 有静态表和动态表 本文实现PHP版的二分查找算法[本算法仅用于顺序存储的查找表] /** * Created by PhpStorm. * User: 1 ...
- 关于《算法(第四版 谢路云译)》标准库In、Out、StdOut和StdIn的正确配置和调用经验分享(以BinarySearch二分查找算法为例)
本人初学<算法(第四版 谢路云译)>有一段时间了,对于初学者按书敲完第一个BinarySearch二分查找算法发现运行错误,我相信大家跟我一样内心是崩溃的.还好经过翻看多个相关论坛以及自己 ...
最新文章
- 吴恩达新书《Machine Learning Yearning》手稿完工,现在全集免费下载!(附pdf下载)
- 前端工作面试问题(下)
- 【Word】一些实用的小技巧
- beego 访问网络_Go--Beego新建项目(解决不能访问的问题)
- malloc开辟的空间在哪一个区间_专业指南 | 室内设计和空间设计区别,到底该选哪一个?...
- 关于Js下拉导航的解释
- python的numpy安装_python的numpy安装方法大全
- 林子雨大数据技术原理总结
- 【项目难点】电商后台管理系统
- audio realtek 耳机没声_解决Realtek High Definition Audio 声卡前面板耳机无声音方法
- matlab sor解线性方程组,解线性方程组的SOR迭代法及其MATLAB实现.pdf
- matlab 循环和判断语句,matlab中循环语句与for循环
- thinkphp使用easywechat接入微信公众号
- win10拨号上网开启热点
- Linux系统配置DNS服务器
- php 指纹验证失败,为什么手指沾了水,指纹识别就会失效?液体会导致指纹解锁失败?...
- HTTP状态码:400\500 错误代码(个人总结)
- PHP 连接sql server
- 这样走能实现读博梦想吗?
- Stm32 学习笔记(1)我所使用的板子