python实现二分查找算法
二分查找算法,是常见的搜索算法之一,适用于有序的序列,通过将序列不断的对折分为区间,从而确定查找值是否存在,优点是速度快。
首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
使用python递归实现其算法:
def binary_search(items: list, item: str) -> float:
if not len(items):return Falseif item > items[-1]:return Falseelif item < items[0]:return Falsen = len(items) // 2if items[n] == item:return Trueelse:if items[n] < item:return binary_search(items[n:], item)else:return binary_search(items[:n], item)
二分查找是应用在数据量较大的场景中,如一些图片的RGB数组操作中,典型的是在滑块验证中使用二分法来确定最佳距离。
def match(self, target, template):img_rgb = cv2.imread(target)img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)template = cv2.imread(template,0)run = 1w, h = template.shape[::-1]print(w, h)res = cv2.matchTemplate(img_gray,template,cv2.TM_CCOEFF_NORMED)
# 使用二分法查找阈值的精确值 L = 0R = 1while run < 20:run += 1threshold = (R + L) / 2print(threshold)if threshold < 0:print('Error')return Noneloc = np.where( res >= threshold)print(len(loc[1]))if len(loc[1]) > 1:L += (R - L) / 2elif len(loc[1]) == 1:print('目标区域起点x坐标为:%d' % loc[1][0])breakelif len(loc[1]) < 1:R -= (R - L) / 2
for pt in zip(*loc[::-1]):cv2.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (7, 279, 151), 2)cv2.imshow('Dectected', img_rgb)cv2.waitKey(0)cv2.destroyAllWindows()return loc[1][0]
python实现二分查找算法相关推荐
- python二分查找算法_如何使用python的二分查找算法
如何使用python的二分查找算法 发布时间:2020-11-18 09:27:29
- python函数教程:Python递归函数 二分查找算法实现解析
这篇文章主要介绍了Python递归函数 二分查找算法实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.初始递归 递归函数:在一个函数里在调 ...
- Python实现二分查找算法,图片结合代码讲解,简单易懂
Python实现二分查找算法,图片结合代码讲解,简单易懂 二分查找是指在一个数组中循环找到特定的目标元素的一种算法,二分查找算法要求这个数组必须是有序的,如果不是有序则最后得出的结果是不准确的,因为其 ...
- android二分查找法简书,【PYTHON】二分查找算法
二分查找: 在一段数字内,找到中间值,判断要找的值和中间值大小的比较. 如果中间值大一些,则在中间值的左侧区域继续按照上述方式查找. 如果中间值小一些,则在中间值的右侧区域继续按照上述方式查找. 直到 ...
- python实现二分查找算法_两种方法实现Python二分查找算法
一. arr=[1,3,6,9,10,20,30] def findnumber(l,h,number): mid=(l+h)//2 if arr[mid]==number: print(" ...
- python实现二分查找算法_python实现二分查找算法
??二分算法的定义不在多说了,百度一下就知道(支持国产 ) import syssource = [1,2,3,4,5,6,7,8,9,10] #must be in orderdes = int(s ...
- python实现二分查找(折半查找)算法
python实现二分查找算法 二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法.但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列. 查找又称折半 ...
- Python 二分查找算法
如果有这样一个列表,让你从这个列表中找到66的位置,你要怎么做? l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76 ...
- 七十六、Python | Leetcode二分查找和分治算法系列
@Author:Runsen @Date:2020/7/4 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰 ...
- python 二分查找_二分查找算法总结
二分查找的思想是通过每次折半快速找到一个数,例如,我们经常玩的游戏猜数字,在0~1000,随便出一个数字98让对方猜,首先猜500,对方给提示比500大还是小,如果数字小于500,就继续猜250,依次 ...
最新文章
- BZOJ——1202: [HNOI2005]狡猾的商人
- 洛谷 1969 积木大赛——水题
- Spring集成redis(Spring Data Redis)
- python基础代码技巧_写Python必须知道的这几个代码技巧!你会吗?
- K8S实战之环境部署1.18(一)
- 【设计模式】之单例模式
- 乐优商城(15)--订单服务
- Field.Store ,ANALYZED备忘
- 前端知识:使用layui模板搭建页面,简单快捷
- Kubernetes-自动扩展器HPA、VPA、CA
- (笔试题)风口的猪-中国牛市
- The computer is being attacked
- java多线程并发基础汇总一
- Spring + SpringMVC + Hibernate + Shiro整合
- 电脑上如何禁止一切弹窗广告?永久关闭桌面弹出广告
- 深度学习辅助决策医疗器械软件审评要点(征求意见稿)
- 【Linux】冯诺依曼体系结构、操作系统及进程概念
- 学习Java的第五天 | 定义方法 | 引用数据类型——类 | 访问权限-修饰符 | 全局变量与局部变量 | toString | 构造方法 | 方法重载
- 微信自主出题,答题小程序开发,微信扫描二维码实现方法,扫二维码出试卷答题的软件!
- 计算机丢失mfc110d.dll,msvcp110d.dll
热门文章
- Expected value at 1:0 异常解决方法
- 团队项目:第二次冲刺站立会议08
- 大道至简——第二章读后感
- 《授予博士、硕士学位和培养研究生的学科、专业目录》 (1997 颁布 )
- 让IIS支持中文文件名和目录
- mvc2 在 .net 4.0 下的ValidateInput(false) 无效
- Linq,企业类库,EXECL生成,Execl chart的一些基本操作记录.(一)
- PhotoShop 2022 mac版新增功能
- Android自定义控件之TextView的展开与折叠
- 关于scala中lazy val的几个注意事项