减治法思想-二分查找图解案例

减治法介绍

减治法思想

​ 分治法是将一个大问题划分为若干个子问题,分别求各个子问题,然后把子问题的解进行合并得到原问题的解。

​ 减治法同样是把一个大问题划分为若干个子问题,但是并不是求解所有的子问题,因为原问题的解就在其中一个子问题当中,所以只求解其中一个子问题。

​ 与分治法不同的就在于这个“减”字上,会不断的将原问题的规模减小,直到找到最终的解。

减治法求解过程:

​ 减治法将原问题分解为若干个子问题,并且原问题(规模为n)的解和子问题(规模为 n/2 或 n-1)的解之间存在某种确定的关系:

​ 原问题的解只存在其中一个子问题中。

​ 原问题的解与其中一个子问题的解之间存在某种对应关系。

那么求解过程就可以确定了:

  1. 将原问题分解为规模较小的子问题
  2. 找到原问题的解所在的子问题
  3. 重复第1、2步直到得到子问题的解
  4. 根据子问题的解,直接得出或计算出原问题的解。

​ 前面蛮力法中使用的案例选择排序其实也是一种减治法,因为其每次都会去除掉一个元素,使问题的规模减一。

减治法案例-二分查找

分析:

​ 二分查找每次计算完数组中间值,与待查找元素对比之后,会使下一次待查找的区间减半,所以二分查找属于比较经典的减治。

过程如下:

  1. 取有序序列的中间值与待查找值比较。
  2. 若中间值与待查找值相同则查找成功。
  3. 若中间值比待查找值小,则在中间记录的左边区间查找。
  4. 若中间值比待查找值大,则在中间记录的右边区间查找。
  5. 重复上述1~4过程,直到查找成功或区间无记录。

过程图解:

1、初始化

​ 有序数组:{ -1、0、3、9、11、13、22、27、55、57、60、77 }

​ 待查找元素: 33

​ 初始化:左下标为0(left = 0)、右下标为11(right=11)
在这里插入图片描述

2、第一趟比较

计算中间值:

m i d = l e f t + ( r i g h t − l e f t ) / 2 = 0 + ( 11 − 0 ) / 2 = 5 mid = left + (right - left) / 2 = 0 + (11 - 0) / 2 = 5 mid=left+(rightleft)/2=0+(110)/2=5

减少规模:

n u m s [ 5 ] = 13 < 33 nums[5] = 13 < 33 nums[5]=13<33,带查找值在数组右半区,则 l e f t = m i d + 1 = 5 + 1 = 6 left = mid + 1 = 5 + 1 = 6 left=mid+1=5+1=6

在这里插入图片描述

3、第二躺比较

计算中间值:

m i d = l e f t + ( r i g h t − l e f t ) / 2 = 6 + ( 11 − 6 ) / 2 = 8 mid = left + (right - left) / 2 = 6 + (11 - 6) / 2 = 8 mid=left+(rightleft)/2=6+(116)/2=8

得到结果:

n u m s [ 8 ] = 33 = 33 nums[8] = 33 = 33 nums[8]=33=33,找到带查找值在数组中的下标8,查找结束。

在这里插入图片描述

代码实现:

    public static int execute(int[] data, int key) {
        int leftIndex = 0, rightIndex = data.length - 1;
        int midIndex = -1;
        // 当左下标不再小于右下标,说明区间内已经没有元素,即数组内没有待查找元素
        while (leftIndex < rightIndex) {
            midIndex = (rightIndex - leftIndex) / 2 + leftIndex;
            // 找到就直接返回
            if (data[midIndex] == key) {
                return midIndex;
            //中间值小于待查找值,待查找值在数组右半区域
            } else if (data[midIndex] < key) {
                leftIndex = midIndex + 1;
            //中间值大于待查找值,待查找值在数组左半区域
            } else {
                rightIndex = midIndex - 1;
            }
        }
        return data[midIndex] == key ? midIndex : -1;
    }

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

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

相关文章

182.二叉树:二叉搜索树的最小绝对差(力扣)

代码解决 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* Tre…

剧本新纪元:探索短剧系统的魔力

在现代社会&#xff0c;随着科技的迅猛进步和生活节奏的不断加快&#xff0c;传统的长篇电视剧和电影已不能完全满足所有人的需求。短剧&#xff0c;由于其简短、快速、直接的特性&#xff0c;正在逐步成为一种文化新趋势。短剧系统正是这一趋势的典型代表&#xff0c;它以独特…

Ansys Mechanical|使用Trace Mapping建立PCB板的有限元模型

Trace Mapping需要使用ECAD的方法 传统方法 vs ECAD方法 传统方法既繁琐又费时。以下是一些数据&#xff1a; 导出电路板布局的step文件大约需要30分钟。 导入Ansys SpaceClaim中大约需要10分钟。 进行布尔运算和共享拓扑操作大约需要24小时甚至更久。 而ECAD方法更加快速且…

CV每日论文--2024.6.12

1、PGSR: Planar-based Gaussian Splatting for Efficient and High-Fidelity Surface Reconstruction 中文标题&#xff1a;PGSR&#xff1a;基于平面的高斯溅射&#xff0c;用于高效、高保真表面重建 简介&#xff1a;这项研究关注于3D高斯喷洒(3DGS)技术,该技术因其高质量渲…

探索生成式AI的未来:Chat与Agent的较量与融合

近年来&#xff0c;生成式人工智能&#xff08;AI&#xff09;不仅在技术界引起了广泛关注&#xff0c;更成为了推动多个行业革新的关键力量。这种技术之所以备受瞩目&#xff0c;不仅在于其独特的创造性和高效性&#xff0c;还在于它对未来商业模式和社会结构可能产生的深远影…

Java的Mybatis框架中#{}与${}使用心得

Java的Mybatis框架中#{}与${}使用心得 在MyBatis框架中&#xff0c;#{}和${}都是用来动态地向SQL语句中插入值的&#xff0c;但它们的处理方式和用途有所不同 #{} 安全&#xff1a;#{}是预编译处理&#xff0c;能够有效防止SQL注入。它会将参数看作一个占位符&#xff0c;在…

servlet梦想酒店管理系统

梦想酒店管理系统 酒店管理系统分为管理端&#xff0c;和用户端&#xff0c; 用户端可以查看酒店客房&#xff0c;预定酒店系统&#xff0c;查询预定信息。 管理端&#xff1a;用户管理&#xff0c;类型&#xff0c;房间管理&#xff0c;业务管理&#xff0c;统计分析。 技术&…

无文件落地分离拆分-将shellcode从文本中提取-file

马子分为shellcode和执行代码. --将shellcode单独拿出,放在txt中---等待被读取执行 1-cs生成python的payload. 2-将shellcode进行base64编码 import base64code b en_code base64.b64encode(code) print(en_code) 3-将编码后的shellcode放入文件内 4-读取shellcod…

中国地市分布图

中国地市分布图 (qq.com)

ssm学生成绩管理系统-海豚

ssm学生成绩管理系统-海豚 ssm学生成绩管理系统。 功能:登录&#xff0c;学生信息管理&#xff0c;课程信息&#xff0c;成绩信息&#xff0c; 技术&#xff1a;java&#xff0c;ssm&#xff0c;mybatics&#xff0c;jsp 平台&#xff1a;eclispe或者idea&#xff0c;mysql5.7…

晨持绪科技:抖音网店怎么做有前景

在数字时代的浪潮中&#xff0c;抖音平台以其独特的魅力和庞大的用户基础成为电商的新阵地。开设一家有前景的抖音网店&#xff0c;不仅需要对市场脉搏有敏锐的洞察力&#xff0c;还需融合创新思维与数据驱动的营销策略。 明确定位是成功的先声。深入分析目标消费群体的需求与偏…

官宣!2024影响因子即将公布,或将迎来这些重大变化!

【SciencePub学术】IF是Impact Factor&#xff0c;即我们俗称的“影响因子”&#xff0c;是衡量学术期刊一个重要性的指标。它通过计算期刊上发表的文章在特定时间内被引用的平均次数来评估期刊的影响力。 影响因子计算公式 影响因子&#xff08;IF&#xff09;&#xff08;期…

wms海外仓系统重要吗?对小型海外仓有哪些好处

虽然小型海外仓本身的体量不大&#xff0c;但是在面对激烈的竞争和日益复杂的客户需求面前&#xff0c;要想赢得一席之地&#xff0c;wms海外仓系统还是一个非常必要的工具的。 对于小型海外仓来说&#xff0c;面对的业务复杂度其实并不比大型海外仓小&#xff0c;甚至更大。 …

电能表抄表是什么意思?

一、电能表抄表的定义与重要性 电能表抄表&#xff0c;顾名思义&#xff0c;是指对安装在用户处的电能表进行读数记录的过程&#xff0c;以计算用户的用电量。它是电力公司计算电费、监控电网运行状态以及进行能源管理的基础。随着科技的发展&#xff0c;传统的手动抄表方式逐…

提升消费者满意度的五星售后服务认证

在当今竞争激烈的市场环境中&#xff0c;消费者满意度是企业取得成功的重要因素。五星售后服务认证作为一种权威性认证&#xff0c;可以显著提高消费者满意度&#xff0c;增强企业的竞争力。本文将从四个方面探讨五星售后服务认证如何提高消费者满意度。 五星售后服务认证是由国…

立创·天空星开发板-GD32F407VE-Timer

本文以 立创天空星开发板-GD32F407VET6-青春版 作为学习的板子&#xff0c;记录学习笔记。 立创天空星开发板-GD32F407VE-Timer 定时器基本定时器示例 定时器 定时器是嵌入式系统中常用的一种外设&#xff0c;它可以产生一定的时间间隔、延时、定时等功能&#xff0c;广泛应用于…

NVMe全闪存储系统性能测试及产品功能与应用场景

今天我们继续对全闪存储系统GS 5024UE的评测&#xff0c;重点关注GS 5024UE的性能测试数据&#xff0c;以及产品所具备的功能、应用场景。通过Windows IOmeter测试软件&#xff0c;来测试GS 5024UE设备的性能&#xff0c;在机器上配上24颗 NVMe 3.84TB硬盘, 16条32Gb FC数据&am…

C++ 03 之 命名空间

game_kun.cpp #include "game_kun.h"void kun::atk() {cout << "吃鸡的攻击"<< endl; } game_lol.cpp #include "game_lol.h"void lol::atk() {cout << "lol的攻击"<< endl; } game_kun.h #include <…

举个栗子!Tableau 技巧(276):学做径向柱状图(Radial Column Chart)

关于 径向柱状图&#xff08;Radial Column Chart&#xff09;&#xff0c;俗称环形柱状图。它的用法跟柱形图基本一致&#xff0c;不同之处在于它的值刻度是环形的&#xff0c;数值从内到外依次增加&#xff0c;柱子越长代表数值越大。 数据粉可能会问&#xff1a;径向柱形图…

调用华为API实现车牌识别

目录 1.作者介绍2.华为云车牌识别2.1车牌识别技术2.2华为云OCR 3.实验过程3.1获取API密钥3.2Python代码实现3.3实验结果 参考链接 1.作者介绍 袁明懿&#xff0c;男&#xff0c;西安工程大学电子信息学院&#xff0c;2023级研究生 研究方向&#xff1a;机器视觉与人工智能 电子…