分治策略之二分搜索技术

Android 15.0 Launcher3中去掉Hotseat功能实现 在15.0系统产品定制化开发中,在Launcher3的定制化需求也是特别多的,由产品是小屏幕的产品,所以产品需求Launcher3 页面布局的原因,要求Launcher3 需要去掉Hotseat 不显示Hotseat下面几个图标,而做满屏app的显示,从而达到美观的效果,下面就来分析去掉Hotseat从而实现这个功能 阅读详情

问题描述:

给定已按升序排好序的n个元素a[0:n-1],现要在这n个元素中找出一特定元素x。

算法复杂度分析:

每执行一次算法的while循环,待搜索数组的大小减少一半。因此,在最坏情况下,while循环被执行了O(logn) 次。循环体内运算需要O(1) 时间,因此整个算法在最坏情况下的计算时间复杂性为O(logn) 。


//二分搜索技术(分治)
#include <iostream>

using namespace std;

template <typename Type>
int BinarySearch(Type a[], const Type &x, int n)
{
    //在a[0]<=a[1]<=...<=a[n-1]中搜索x
    //找到x时返回其在数组中的位置,否则返回-1
    int 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;
        } else {
            right = middle-1;
        }
    }
    //未找到x
    return -1;
}

int main()
{
    int n;
    cout<<"输入数组的大小n:"<<endl;
    cin>>n;
    int *a = new int[n];
    cout<<"输入数组中的数据:"<<endl;
    for(int i = 0; i < n; i++)
    {
        cin>>a[i];
    }
    int obj_num;
    cout<<"输入所要找的数:"<<endl;
    cin>>obj_num;
    int flag = BinarySearch(a,obj_num,n);

    if(-1 == flag)
    {
        cout<<"未找到obj_num"<<endl;
    } else {
        cout<<"找到obj_num,其在数组中的下标为:"<<flag<<endl<<"是第"<<flag+1<<"个数"<<endl;
    }
    delete a;
    return 0;
}


QGIS004:【05矢量属性表】-保留字段、删除字段、添加唯一值索引字段、添加字段到属性表、添加自增量字段、添加XY字段到图层、文本型转浮点型、重构字段、重命名字段 摘要:QGIS矢量属性表工具箱包括保留字段、删除字段、添加唯一值索引字段、添加字段到属性表、添加自增量字段、添加XY字段到图层、文本型转浮点型、重构字段、重命名字段等选项,本文介绍各选项的基本操作。 阅读详情

相关推荐

ArcGIS基础:CAD数据转换为GIS数据(符号化显示、数据转换、线转面、空间连接)

1、符号化显示: CAD数据加载进来有很多列表,包含了点【point】、线【polyline】、面【polygon】、标注数据【Annotation】等数据,本次实验我们需要用到的是面数据,也就是.dwgPolygong格式的数据。如下图所示: 把数据加载进来,然后在2处打开属性表,查看CAD数据的属性表,打开后可以发现【layer】图层表示就是地块的用地性质,它就是符号化显示的依据。 我们在数据上右键【属性】,打开图层属性,找到【符号系统】,选择类别中的【唯一值】,然后在【值字段】下拉选择【layer】,

yuanYW7556的博客 2万+

二分搜索技术

给定已按升序排好序的 n 个元素 a[0:n-1],现要在这 n 个元素中找出一特定元素 x。 输入: 输入包括若干个用例,第一行为一个正整数 n 表示用例个数,接下来每个用例占两行, 第一行为一个正整数 k 和 x,表示 k 个元素,要求查找 x,第二行为 k 个已排序正整数, 输出: 每个用例用一行输出找出的元素的位置和比较次数,用一个空格隔开,如果不存在,则位 置用 0 表示。 样例输入: 4 5 3 1 2 3 4 5 6 7 2 3 4 6 8 10 10 40 1 5 9 10 20 25 33

MR. Dong的博客 932

别再对着数据手册画图了!用HFSS 2023 R2快速复现ESP-01的PCB天线(附模型文件)

本文详细介绍了使用HFSS 2023 R2逆向复现ESP-01 PCB天线的五个关键步骤,包括逆向工程准备、高效建模技巧、材料与边界设置、激励与求解配置以及结果分析与设计验证。通过参数化建模和智能边界检测,大幅提升仿真效率,适用于WIFI和蓝牙设备的射频设计优化。

weixin_30832143的博客 76

二分搜索-分治算法

问题描述   给定已按升序排好序的n个元素a[0:n-1],现要在这n个元素中找出一特定元素x。 分析  是否满足分治法的特征?   √ 该问题的规模缩小到一定的程度就可以容易地解决;   √ 该问题可以分解为若干个规模较小的相同问题;   √ 分解出的子问题的解可以合并为原问题的解;   √ 分解出的各个子问题是相互独立的。  给定已按升序排好序的n个元素a[0:n-1],现要在这n个元素中找出一特定元素x。  分析:如果n=1即只有一个元素,则只要比较这个元素和x就可以确定x是否在表中。因此这个问

迷雾总会解 2709

Ubuntu终端接入Codex:一行脚本搞定AI编程助手安装与配置

在开发者日常工作中,命令行终端是最高频的操作环境,而AI编程助手的出现正在改变传统的编码方式。通过将大模型能力与终端工具链结合,开发者无需切换窗口即可完成命令查询、代码生成、项目理解和自动执行等任务。Ubuntu作为服务器和开发机的主流系统,搭配Node.js生态和API Key认证,即可在本地闭环运行AI助手。本文从环境准备、密钥配置、权限管理到自动化脚本封装,系统拆解在终端中接入Codex的完整流程,并分享高频用法与实测排障经验,帮助开发者安全、高效地让AI融入命令行工作流。

weixin_29061041的博客 321

封装CTP API为Java SDK

本文介绍了在Windows环境下使用Java调用CTP API的编译实现过程。首先需要准备CTP API SDK、JDK、SWIG和Visual Studio等工具,配置好开发环境。然后通过搭建目录结构、编写SWIG接口文件ctp.i,实现C++到Java的代码转换。文中详细说明了文件目录组织方式,并提供了处理中文乱码的代码示例。通过这一系列步骤,最终将CTP的C++接口转换为Java可调用的形式,为Java项目获取期货实时报价数据提供支持。

weixin_43952815的博客 1222

二分查找/折半查找(C++实现)

要求:给定已按升序排好序的n个元素a[0:n-1],现要在这n个元素中找出一特定元素x。 分析: 该问题的规模缩小到一定的程度就可以容易地解决; 如果n=1即只有一个元素,则只要比较这个元素和x就可以确定x是否在表中。因此这个问题满足分治法的第一个适用条件 该问题可以分解为若干个规模较小的相同问题; 分解出的子问题的解可以合并为原问题的解; 分解出的各个...

weixin_30808253的博客 835

【OpenFOAM】-olaFlow-算例10-wavemakerTank

采用 Flap和Piston两种方式的动网格进行造波

ou_no的博客 2167

二分查找(分治)

使用二分法在一组升序的数据中进行找第一个X出现的下标,没有返回-1

luckymec的博客 213

ICC2:平行打孔create_pg_stapling_vias

power rail(follow pin)不总是metal1一成不变的,当需要使用metal2做power rail,而standard cell的pg pin仍然是metal1时就需要平行打孔,从metal2到metal1。 以往都是用create_pg_vias -allow_parallel_objects来做,但这样有两个弊端,一是需要抓出所有的via12(包括standard cell内部的和出pin绕线产生的),添加routing blockage,防止create pg via的时候产生d

m0_61544122的博客 2256

电源完整性分析:PDN阻抗与去耦电容设计——目标阻抗计算与电容选型深度实战

摘要:随着嵌入式处理器主频突破 GHz、多核架构普及,电源完整性(Power Integrity, PI)已成为高速 PCB 设计中不可忽视的关键环节。本文从 PDN(电源分配网络)阻抗模型出发,系统讲解目标阻抗计算方法、去耦电容选型策略、反谐振抑制技术,并结合 STM32F4 核心板的完整设计实例,提供一套可落地的电源完整性工程实践方案。电源完整性设计是一项系统工程,需要从目标阻抗计算电容选型反谐振抑制PCB 布局目标阻抗是设计的起点,由电源电压、纹波要求和瞬态电流决定去耦电容。

从事移动开发八年,csdn博客专家,阿里云特邀专家,华为云云享专家,高级网络信息安全工程师,大数据工程师(高级),python技术开发(高级),HarmonyOS 应用开发者高级认证,现在某学校任教。 1万+

分治算法之二分查找【含例题】

概述 给定已按升序排列的n个元素A[0:n-1],现要在这n个元素中找出某一特定元素(查找关键字:key) 二分查找(Binary Search)又称为折半查找,是一种高效的算法。 二分查找要求待查找列表中的元素是有序的 核心思想 设A[low…high]为当前查找区间,首先确定区间的中点位置mid=⌊(low +high)/2⌋;然后将待查的key值与A[mid]进行比较 (1) 若key=A[mid],则查找成功并返回该元素的下标 (2) 若key<A[mid],则查找左子表A[lo

爱笑的博客 5419

基于知识图谱的农作物病虫害问答系统设计与实现

基于规则的问题分类是自问答系统诞生以来就一直存在的方式,主要代表就是众多的专家系统,构建专家系统采用的是规则分类器,优点是能够对特定领域、特征明显的问题进行高效精准问答,但是。,在问答系统中,问题以语音及文本字符等自然语言形式输入,利用问答系统的内部的逻辑处理模块,通过自然语言处理技术获得输入问句的详细语义信息,再经过知识检索、置信分析等步骤,自然语言处理中,用于文本分类任务的机器学习方式有两种,一种用传统的机器学习,如 NBC、SVM 等,另一种采用深度学习,如 CNN 和 RNN 等。

全网粉丝30W+,优快云、稀土掘金人工智能领域签约作者,人工智能、大模型、Python 爬虫,商务合作,请私信沟通。 2166

2_3 递归与分治策略(二分搜索技术)

二分搜索算法是分支策略的典型应用,具体是在给定的有n个元素的已排序序列a中找出一个特定元素。 基本思想:将n个元素分为两半,取a[n/2]与x进行比较,   如果x<a[n/2],继续在数组a的左半部分搜索。   如果x>a[n/2],继续在数组a的右半部分搜索。 (图片源自百度图片) 查找算法对比:   1、顺序搜索不能很好利用排序这个已知条件,而且是O(n)算法。 ...

weixin_34198762的博客 350

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

计算机算法设计与分析之递归与分治策略——二分搜索技术

递归与分治策略 二分搜索技术   我们所熟知的二分搜索算法是运用分治策略的典型例子,针对这个算法,先给出一个简单的案例。   目的:给定已排好序的n个元素a[0:n-1],现要在这n个元素中找出一特定的元素x。   我们首先想到的最简单的是用顺序搜索方法,逐个比较a[0:n-1]中元素,直至找出元素x或搜索遍整个数组后确定x不在其中。这个方法没有很好地利用n个元素已排好序的这个条件,因此在...

weixin_34403693的博客 294

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【二分搜索技术】“递归与分治策略”——《算法设计与分析(第五版)》

【二分搜索技术】“递归与分治策略”——《算法设计与分析(第五版)》

NI‘CE’XIAN‘s blog 1334

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

递归与分治策略

递归与分支策略 1.递归算法 1.1什么是递归: 直接或间接地调用自身的算法称为递归算法,用函数自身给出定义的函数称为递归函数。每个递归函数都要有非递归定义的初始值,如阶乘函数,斐波那契,汉诺塔。 2.分之策略 2.1什么是分支策略: 基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题相互独立且与原问题相同。递归的解这些子问题,然后将各个子问题的解合并得到原问题的解。 ...

naumy的博客 1875

分治算法(一)二分搜索技术

分治算法的本质就是将一个大规模的问题分解为若干个小规模的相同子问题,分而治之。 1.分治算法简述 1.1分治算法也有它的适用条件,满足以下3个条件,才能使用分治法来解决: (1)原问题可分解为若干个规模较小的相同子问题 (2)子问题相互独立 (3)子问题的解可以合并为原问题的解 1.2使用分治法解题的步骤: (1)分解:将要解决的问题分解为若干个规模较小、相互独立、与原问题形式相同的子问题。 (2...

sinat_28753227的博客 6082

【算法设计与分析】(三)二分搜索技术与大整数乘法

本文探讨了分治策略在两大经典算法中的应用。二分搜索技术通过每次将搜索范围减半,将时间复杂度从O(n)降至O(log n),适用于有序数据的高效查找。大整数乘法采用Karatsuba算法,通过拆分大数并减少乘法次数,将时间复杂度从O(n²)优化到O(n^1.585),显著提升运算效率。这两种算法分别展示了分治思想在不同场景下的实践价值,为处理大规模数据提供了优化方案。文章还列举了电商搜索、密码学等实际应用场景,并辅以具体计算示例说明算法实现过程。

2402_83322742的博客 1097

计算机算法设计与分析 第2章 递归与分治策略 (笔记)

第2章 递归与分治策略 2.1 递归的概念 直接或间接调用自身为递归。 采用递归的目的(思路)是将一个较大(或较复杂)的问题分解成较小的相同问题。 【例-阶乘】 阶乘函数 n! 可用递归函数定义: n! = 1 ,n=0 n(n-1)! ,n&gt;0 递归函数必须有非递归定义(直接给定)的初始值。 第一式给出初始值,第二式给出用较小自变量...

一只大鸽子的博客 1184

第2章 递归与分治策略,二分搜索技术(查找不成功时,返回区间位置)

当要查找的数x不在有序数组a中时,返回第一个大于x的数的位置或第一个小于x的数的位置   lowend,midend,highend表示查找结束时各游标的值,low,mid,high表示使查找结束的最后一次操作时,各游标的值。   查找结束的条件是lowend>highend,由于lowend的值由mid+1得到,highend的值由mid-1得到,所以, 当lowend>highend

Vector 1540

算法_二分搜索技术

二分搜索技术的递归与非递归

qq_51027537的博客 209

一文带你吃透“递归与分治策略”!——常用算法连载Ⅰ

目录什么是递归与分治策略?唠唠递归讲讲分治孪生兄弟?时间复杂度为什么要用递归与分治策略?怎么用递归与分治策略?在哪用递归与分治策略?递归算法怎么运行?吃透! 对科普不感冒的同学可以直接跳到后面进行阅读。 什么是递归与分治策略? 唠唠递归 直接或间接地调用自身的算法称为递归算法。用函数自身给出定义的函数称为递归函数。 讲讲分治 分治法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题(由于“平衡子问题”的思想,子问题规模应该都要大致相同),这些子问题相互独立且与原问题相同。递归地解这些子问题,

GreatBiscuit的博客 820

递归与分治策略(2)

分治法所能解决的问题一般具有以下几个特征: (1)该问题的规模缩小到一定程度就可以容易地解决。 (2)该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质。 (3)利用该问题分解出的子问题的解可以合并为该问题的解。 (4)该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题。

李春春的专栏 1056

算法分析与设计4_分治策略

分治策略 分治策略是对于一个规模为n的问题,若该问题可以容易地解决(比如说规模n较小)则直接解决,否则将其分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同。 递归地解这些子问题,然后将各子问题的解合并得到原问题的解。 分治法的基本步骤 分治法在每一层递归上都有三个步骤: 分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题; 解决:若子问题规模较小而容易被解决则直接解,否则递归地解各个子问题; 合并:将各个子问题的解合并为原问题的解。 根据分治法的分割原则,原问题应该分

weixin_44618388的博客 422

高级算法设计与分析(二) -- 递归与分治策略

递归与分治

zqx1473的博客 1525
上一篇: 贪心算法之活动安排问题
下一篇: 分治策略之全排列问题
Hy_Fighting
博客等级 码龄15年 11粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值