2.3 二分搜索技术

news/2024/5/3 13:06:32/文章来源:https://blog.csdn.net/tang7mj/article/details/129368321

二分搜索算法是运用分治策略的典型例子。给定己排好府的 n个元素a10:n-1],现要在

这n个元素中找出一特定元素3。首先较容易想到的是用顺序搜索方法,逐个比较a10:1-1]

中元素,直至找出元素,或搜索遍整个数组后确定,不在其中。这个方法没有很好地利用n

个元素已排好序这个条件,因此在最坏情况下,顺序搜索方法需要 O(1次比较。

二分搜索方法充分利用了元素间的次序关系,采用分治策略,可在最坏情況下用 O(ogn)

时间完成搜索任务。二分搜索算法的基本思想是,将n个元素分成个数大致相同的两半,取

aln/21与x 作比较。如果x-aln/2],则我到x,算法终止;如果x<ain/2],则只在数组。 的左

半部继续搜索 3;如果saln/2],则只在数组a 的右半部继续搜索x。具体算法可描述如下:

template<class Type>
int BinarySearch(Type a[],const Type& x,int n)
{//在a[0]<=a[1]<=...<=a[n-1]中搜索x//找到x时返回其在数组中的位置,否则返回-1int left=0;    int right=n-1;while(left<=right){int middle=(left+right)/2;if(x==a[middle]){return middle;}if(x>a[middle]){left=middle+1;}elseright=middle-1;}return-1;//未找到x
}

容易看出,每执行一次算法的 while 福环,待搜索数组的大小减小一半。因此,在取多

情况下,whie 循环被执行了 0(o 2)次。循环体肉运算需要 Q()时间,因此整个算法在最动

情况下的计算时间复杂性为 Ologn)。

三分搜索算法的思想易手理解,但是要写一个正确的二分搜索算法也不是一件简单的

事。Knuth在他的著作 “The Art of Coroputer Prograraming : Sorting and Searching”中提到,

第一个二分搜素算法早在 1946年就出现丁,但是第一个完全正确的二分搜索算法直到1946年才出现。


总结后期还会更新,课程太紧后面会改进这篇文章,还有所有需要改进的文章

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_267359.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

字节3次都没裁掉的7年老测试。掌握设计业务与技术方案,打开上升通道!

前言职场中的那些魔幻操作&#xff0c;研发最烦的是哪个&#xff1f;“面对业务需求的时候&#xff0c;可能都听过这样一句话&#xff1a;这个很简单&#xff0c;直接开发&#xff0c;三天内上线&#xff1b;”朋友说&#xff1a;“产品听了流泪&#xff0c;测试见了崩溃&#…

元宇宙、区块链 通俗易懂

什么是区块链&#xff1f;比特币挖矿是什么&#xff1f;元宇宙是什么&#xff1f;Web(万维网)的三权化进化&#xff1a;基于此&#xff0c;介绍下“元宇宙”。1992年&#xff0c;美国作家史蒂芬森在《雪崩》一书中首次提出了“元宇宙(Metaverse)”的概念。元宇宙实际上就是一种…

[Python图像处理] 使用高通滤波器实现同态滤波

使用高通滤波器实现同态滤波同态滤波基础实现同态滤波相关链接同态滤波基础 同态滤波是一种去除图像中乘性噪声的技术&#xff0c;常用于校正图像中的不均匀照明。根据图像形成的光照反射模型&#xff0c;图像 f(x,y)f(x,y)f(x,y) 可以由以下两个分量表征&#xff1a; 入射到…

一篇深入解析BTF 实践指南

BPF 是 Linux 内核中基于寄存器的虚拟机&#xff0c;可安全、高效和事件驱动的方式执行加载至内核的字节码。与内核模块不同&#xff0c;BPF 程序经过验证以确保它们终止并且不包含任何可能锁定内核的循环。BPF 程序允许调用的内核函数也受到限制&#xff0c;以确保最大的安全性…

scratch老鹰捉小鸡 电子学会图形化编程scratch等级考试二级真题和答案解析2022年12月

目录 scratch老鹰捉小鸡 一、题目要求 1、准备工作 2、功能实现 二、案例分析 <

分布式系统中的补偿机制设计问题

我们知道&#xff0c;应用系统在分布式的情况下&#xff0c;在通信时会有着一个显著的问题&#xff0c;即一个业务流程往往需要组合一组服务&#xff0c;且单单一次通信可能会经过 DNS 服务&#xff0c;网卡、交换机、路由器、负载均衡等设备&#xff0c;而这些服务于设备都不一…

使用flex弹性造APP首页轮子【前端Flex弹性布局】

文章目录一.使用flex弹性造一个APP首页轮子二.需求分析和完成步骤三.效果预览:一.使用flex弹性造一个APP首页轮子 这是内科大企业课(全栈开发_web前端的课程)&#xff0c;需求如下&#xff1a; 使用Flex弹性布局&#xff0c;仿写下面的页面&#xff1a; 二.需求分析和完成步…

Ubuntu系统升级16.04升级18.04

一、需求说明 作为Linux发行版中的后起之秀&#xff0c;Ubuntu 在短短几年时间里便迅速成长为从Linux初学者到实验室用计算机/服务器都适合使用的发行版&#xff0c;目前官网最新版本是22.04。Ubuntu16.04是2016年4月发行的版本&#xff0c;于2019年4月停止更新维护。很多软件支…

剑指 Offer 58 - 翻转单词顺序

摘要 剑指 Offer 58 - I. 翻转单词顺序 一、双指针解析 算法解析&#xff1a; 倒序遍历字符串s &#xff0c;记录单词左右索引边界i , j&#xff1b;每确定一个单词的边界&#xff0c;则将其添加至单词列表res&#xff1b;最终&#xff0c;将单词列表拼接为字符串&#xff…

九龙证券“风光储锂芯”集体回暖 创业板指探低回升

周一&#xff0c;A股三大指数体现分解&#xff0c;沪指微跌&#xff0c;创业板指探低上升小幅上涨。盘面上&#xff0c;“风景储锂芯”集体反弹&#xff0c;6G概念再度大涨&#xff0c;消费股午后逆势走强&#xff0c;酒店旅游方向领涨&#xff0c;而前期热门的数字经济概念震动…

Ubuntu下安装Docker

大家好&#xff0c;我是中国码农摘星人。 欢迎分享/收藏/赞/在看&#xff01; 文章目录1 安装Docker1.1 使用官方安装脚本自动安装 &#xff08;仅适用于公网环境&#xff09;1.2 手动安装帮助1.2.1 Ubuntu 14.04 16.04 (使用apt-get进行安装)2 安装校验3 镜像加速器3.1 安装&a…

【Azure 架构师学习笔记】-Azure Storage Account(1)- Queue Storage

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Storage Account】系列。 接上文 【Azure 架构师学习笔记】-Azure Storage Account&#xff08;1&#xff09;-类型简介 前言 Azure Storage Queues 是一个专门用来处理基于云环境队列的Azure 服务。每个队列都维护着…

【编程基础之Python】11、Python中的表达式

【编程基础之Python】11、Python中的表达式Python中的表达式表达式与运算符算术表达式赋值表达式比较表达式逻辑表达式位运算表达式总结Python中的表达式 在Python中&#xff0c;表达式是由操作数、运算符和函数调用等组成的语法结构&#xff0c;可以进行各种数学运算、逻辑判…

css盒模型详解

一、引言 盒模型是网页开发中的一个基本概念&#xff0c;它描述了网页元素的外观和大小。盒模型由内容区域、内边距、边框和外边距四个部分组成&#xff0c;这些部分的大小和位置都可以通过CSS进行控制。在本文中&#xff0c;我们将介绍盒模型的概念和作用&#xff0c;并提出本…

【微信小程序】-- 页面事件 - 上拉触底(二十六)

&#x1f48c; 所属专栏&#xff1a;【微信小程序开发教程】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &…

Canal实战 canal的坑 CanalParseException: column size is not match for table 错误

时序表结构方案设计 异常现象截图 canal的坑&#xff1a;CanalParseException: column size is not match for table (表结构缓存异常阻塞问题) 背景 早期的canal版本(<1.0.24)&#xff0c;在处理表结构的DDL变更时采用了一种简单的策略&#xff0c;在内存里维护了一个当…

企业级信息系统开发学习笔记1.7 基于XML配置方式使用Spring MVC

文章目录零、本节学习目标一、Spring MVC概述1、MVC架构2、Spring MVC3、使用Spring MVC的两种方式二、基于XML配置与注解的方式使用Spring MVC&#xff08;一&#xff09;创建Spring项目【SpringMVCDemo01】&#xff08;二&#xff09;在pom文件里添加相关依赖&#xff08;三&…

QT入门Display Widgets之QLine、QLcdNumber、QTextBrowser

目录 一、QLine界面相关 1、布局介绍 2、界面基本属性 二、QLCDNumber的介绍 1、界面布局 2、定时器代码测试 三、QTextBrowser 此文为作者原创&#xff0c;创作不易&#xff0c;转载请标明出处&#xff01; 一、QLine界面相关 1、布局介绍 先看下界面中创建个Q…

电池保护板 - 问题归纳

电池保护板 - 问题归纳简介充电锂电池磷酸铁锂电池放电总结最近更新日期&#xff1a;2023-03-07简介 电池充放电过程中&#xff0c;如果电压、电流或温度等参数不稳定或超出电池的安全范围&#xff0c;就会对电池造成损害&#xff0c;甚至可能引发安全事故。为了保护电池的安全…

在Hadoop和hive基础上安装zeppelin

Apache Zeppelin是一个让交互式数据分析变得可行的基于网页的notebook&#xff0c;Zeppelin提供了数据可视化的框架。第一步&#xff1a;上传压缩包&#xff0c;解压&#xff0c;更改名称[roothadoop install]# tar -zxf zeppelin-0.10.0-bin-all.tgz -C ../soft/[roothadoop i…