【算法设计】递归与分治算法设计——二分搜索、假币识别问题(C++实现)

创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
更多算法分析与设计知识专栏:算法分析🔥
给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ

在这里插入图片描述


目录

  • 一、二分搜索问题
    • 问题描述
    • 算法思想和解题思路
    • C++代码
  • 二、假币识别问题
    • 问题描述
    • 算法思想和解题思路
    • C++代码

一、二分搜索问题

二分搜索解题框架见:【算法】分治法的基本思想和二分搜索的应用

问题描述

a[0:n-1]是已排好序的数组

试改写二分搜索算法,使得当搜索元素x不在数组a中时,返回小于的最大元素的位置i大于x的最小元素的位置j

当搜索元素x在数组a中时,返回x在数组中的位置,此时i和j相同

算法思想和解题思路

先将有序数组分成两部分,中间位置mid为基准值

  • 若该值等于目标值key,则直接返回

  • 若该值大于目标值,则在左半部分进行二分搜索

  • 若该值小于目标值,则在右半部分进行二分搜索

循环执行二分搜索,直到左侧low标记大于右侧high标记,跳出循环则为查找失败,此时的begin就是比x大的最小数组元素下标,end就是比x小的最大元素数组下标

二分算法运作的核心理念是将数组分割为两部分,然后根据所查找或排序的元素与中间元素的比较结果,将查找或排序的范围缩小一半

C++代码

#include <iostream>
using namespace std;
/*
二分搜索问题:设a[0:n-1]是已排好序的数组。试改写二分搜索算法,
使得当搜索元素x不在数组a中时,返回小于x的最大元素的位置i和大于x的最小元素的位置j;
当搜索元素x在数组a中时,返回x在数组中的位置,此时i和j相同。
*/
void binarySearch(int arr[],int target)
{int length = 7;int left = 0;int right = length - 1;if (target < arr[0]) {cout << "比x大的最小数组元素的下标是0" << endl;cout << "不存在比x小的数组元素" << endl;return;}else if (target > arr[length - 1]) {cout << "不存在比x大的数组元素" << endl;cout << "比x小的最大数组元素的下标是" << right << endl;return;}while (left <= right){int mid = (left + right) / 2;if (arr[mid] == target) {cout << "与x相等的数据元素的下标是" << mid << endl;return;}else if (arr[mid] < target) {left = mid + 1;}else {right = mid - 1;}}cout << "比x大的最小数组元素的下标是" << left << endl;cout << "比x小的最大数组元素的下标是" << right << endl;return ;
}int main()
{int a[] = { 2,3,4,5,6,8,9 };binarySearch(a, 7);binarySearch(a, 4);return 0;
}

在这里插入图片描述

二、假币识别问题

问题描述

一个袋子里有n个硬币,其中一枚是假币,假币和真币外观一模一样,仅凭肉眼无法区分,但是已知假币比真币轻一些

试设计识别假币的分治算法

算法思想和解题思路

先判断当前硬币数量是奇数还是偶数

  • 如果硬币数量是偶数,那么我们需要做的是检查这些硬币是否只有两枚。如果是,那么比较这两枚硬币的重量,较轻的那枚就是假币。如果没有只有两枚硬币,那么我们将这些硬币分成两堆,比较这两堆的重量,轻的那堆中会有假币。

  • 如果硬币数量是奇数,我们需要做的是取出中间的那枚硬币。然后,将剩余的硬币分成两部分。如果这两部分的重量相等,那么假币就是我们之前取出的中间那枚。如果这两部分的重量不相等,就重复到只有两个硬币比较重量,轻的一个就是假币

分治法将一个问题分解为多个子问题,并递归地解决这些子问题,最后将子问题的解合并为原问题的解

C++代码

#include <iostream>  
using namespace std;// 判断硬币是否为假币  
bool isfake(int coin[], int n, int i) {for (int j = 0; j < i; j++) {if (coin[j] < coin[i]) {return true;}}for (int j = i + 1; j < n; j++) {if (coin[j] < coin[i]) {return true;}}return false;
}
// 识别假币的分治算法  
void search(int coin[], int n) {if (n == 2) {// 当硬币数量为2时,输出重量较轻的硬币  if (coin[0] < coin[1]) {cout << coin[0] << endl;}else {cout << coin[1] << endl;}}else if (n % 2 == 0) {// 当硬币数量为偶数时,将硬币分成两段,并比较两段的平均重量  int mid = n / 2;if (isfake(coin, n, mid)) {search(coin, mid);}else {search(coin + mid, n - mid);}}else {// 当硬币数量为奇数时,去掉中间的硬币,将剩余的硬币分成两段,并比较两段的平均重量  int mid = (n - 1) / 2;if (isfake(coin, n, mid + 1)) {search(coin, mid + 1);}else {search(coin + mid + 1, n - mid - 1);}}
}int main() {int arr[4] = { 2,4,2,5 };search(arr, 4);return 0;
}

在这里插入图片描述


在这里插入图片描述

大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!如果本文哪里有错误的地方还请大家多多指出(●'◡'●)

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

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

相关文章

数字化驱动基础网络建设升级:实现高效信息传输的关键

随着科技的飞速发展&#xff0c;数字化驱动基础网络建设升级已成为当今社会的重要议题。信息传输的高效性和安全性对于现代社会的发展至关重要。本文将深入探讨数字化驱动基础网络建设升级的重要性、现状、升级措施以及未来发展趋势&#xff0c;旨在为相关领域提供有益的参考。…

“中国版Zara”拉夏贝尔:从辉煌到破产清算

文/ 大力财经 拉夏贝尔的破产清算&#xff0c;让人不禁惋惜。这个曾经被誉为“中国版Zara”的女装品牌&#xff0c;在全国拥有超过2000家门店&#xff0c;一度是年轻人的追捧对象。 然而&#xff0c;由于市场竞争激烈、品牌定位模糊、库存积压严重等问题&#xff0c;拉夏贝尔…

从0开始学云计算之服务器:服务的定义,特点,应用场景,分类

服务器定义 服务器是计算机的一种。它比普通计算机运行速度更快、负载更高且价格更高。 服务器的英文名称为“Server”&#xff0c;是指在网络上提供各种服务的高性能计算机。作为网络的节点&#xff0c;存储、处理网络上80%的数据、信息&#xff0c;因此也被称为x络的灵魂。 …

2023IG新功能大整理,更多玩法助力营销推广

作为当今全球最为受欢迎的社交媒体之一&#xff0c;Instagram在2023年迎来了一系列重要的功能更新。学习了解Instagram的最新功能&#xff0c;以及如何高效利用这些新的功能和工具&#xff0c;对于跨境品牌在该平台上实现营销推广至关重要。今天给大家详细介绍 Instagram在2023…

formData对象打印不出来

用el-upload上传图片 以流的形式传给后台 所以用formData对象带数据 let formData new FormData() formData.append(name&#xff0c;monkey7) console.log(formData) 明明已经把数据append进去了 console.log在控制台却打印不出 后来发现他得用formData.get("xxx"…

自然语言处理---Transformer机制详解之GPT2模型介绍

1 GPT2的架构 从模型架构上看, GPT2并没有特别新颖的架构, 它和只带有解码器模块的Transformer很像. 所谓语言模型, 作用就是根据已有句子的一部分, 来预测下一个单词会是什么. 现实应用中大家最熟悉的一个语言模型应用, 就是智能手机上的输入法, 它可以根据当前输入的内容智…

C++基础算法----正整数高精度加减乘除

4、正整数高精度 ​ 出现高精度的情况一般只有C会出现&#xff0c;python会无限制&#xff0c;java有大整数&#xff0c;所以基本上不用考虑&#xff0c;一般会出现四种情况 一个较大数A 一个较大数B一个较大数A - 一个较大数B一个较大数A * 一个数一个较大数A / 一个数 这里…

模式识别——贝叶斯决策理论

模式识别——贝叶斯决策理论BDR 须知基本原则0-1损失下的BDRMAP&#xff08;极大后验&#xff09;log trick 须知 所有内容在分类问题下讨论。 基本原则 定义 X X X为观测 Y Y Y为状态 g ( x ) g(x) g(x)用 x x x对 y y y进行预测预测损失为 L [ g ( x ) , i ] L[g(x),i] L[…

关于数据可视化那些事

干巴巴的数据没人看&#xff0c;数据可视化才能直观展现数据要点&#xff0c;提升数据分析、数字化运营决策效率。那关于可视化的实现方式、技巧、工具等&#xff0c;你了解几分&#xff1f;接下来&#xff0c;我们就来聊聊数据可视化那些事。 1、什么是数据可视化&#xff1f…

网络工程师知识点7

111、IS-IS路由器的三种类型&#xff1f; Level-1路由器&#xff08;只能创建level-1的LSDB&#xff09; Level-2路由器&#xff08;只能创建level-2的LSDB&#xff09; Level-1-2路由器&#xff08;路由器默认的类型&#xff0c;能同时创建level-1和level-2的LSDB&#xff09;…

友思特方案 | 3D点云实例分割现成算法模块助力实现自动化上下料应用

引言 全球范围内的大型汽车制造商和技术公司&#xff0c;以及一些专注于智能制造领域的创新企业&#xff0c;在3D视觉引导汽车部件自动化上下料项目方面都在进行研发和实践。国内外汽车制造行业&#xff0c;越来越多的企业开始采用3D视觉引导技术进行自动化上下料操作。 本文将…

优测云测试平台 | 有效的单元测试

一、前言 本文作者提出了一种评价单元测试用例的质量的思路&#xff0c;即判断用例是否达到测试的“四大目标”。掌握识别好的用例的能力&#xff0c;可以帮助我们高效地写出高质量的测试用例。 评判冰箱的好坏&#xff0c;并不需要有制造一台冰箱的能力。在开始写测试用例之…

【unity3D】Scroll Rect组件—制作下滑列表

&#x1f497; 未来的游戏开发程序媛&#xff0c;现在的努力学习菜鸡 &#x1f4a6;本专栏是我关于游戏开发的学习笔记 &#x1f236;本篇是unity的Scroll Rect组件 Scroll Rect组件 基础知识详细说明案例演示——制作一个简单的下滑框扩展 介绍&#xff1a;Scroll Rect组件是用…

【万字长文】向 AI 提问的艺术

向 AI 提问的艺术 本文是我在学习 Prompt Engineering 过程中&#xff0c;总结出来的一些经验和方法。里边包含一些自己的心得和验证有效的技巧。这些技巧在很多其他文章中也有介绍&#xff0c;这里可以当作是一个集大成的汇总。 我会按照“道——法——术”三个层面来介绍向 …

【最经典的79个】软件测试面试题(内含答案)

001.软件的生命周期(prdctrm) 计划阶段(planning)-〉需求分析(requirement)-〉设计阶段(design)-〉编码(coding)->测试(testing)->运行与维护(running maintrnacne) 测试用例 用例编号 测试项目 测试标题 重要级别 预置条件 输入数据 执行步骤 预期结果 0002.问&…

vue2中,下拉框多选和全选的实现

vue2中&#xff0c;下拉框多选和全选的实现 代码布局在methods: 中添加功能函数较为完整的一个整体代码&#xff1a; 如图所示点击全选即可完成下拉框中全部子项的全部的选中&#xff0c;同时取消全选即可全部取消选择。 代码布局 <div class"chos-box2"><…

如何给照片添加水印?请看下面3个简单教程

如何给照片添加水印&#xff1f;随着智能手机的普及和不断提升的拍摄技术&#xff0c;如今人们可以轻松使用手机进行高质量的照片拍摄。从老人到小孩&#xff0c;每个人都可以在日常生活中捕捉到美好瞬间&#xff0c;并将其记录下来。作为一种表达自己的方式&#xff0c;现在手…

安装pythonQt报错

在使用命令行pip install PyQt5安装pythonQt5的时候报错。 镜像源有问题&#xff0c;手动设置可用的源 pip install PyQt5 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com tool工具 pip install PyQt5-tools -i https://pypi.douban.com/simple 安装成…

以赛促教,以赛促研 ——计算机科学系举办“火焰杯”软件测试开发选拔赛颁奖仪式

颁奖仪式 2023年3月9日&#xff0c;第三届“火焰杯”软件测试开发选拔赛颁奖仪式在南海楼124会议室举行&#xff0c;计算机科学系系主任龙锦益教授、指导老师孙玉霞副教授、测吧科技有限公司王雪冬总监及获奖同学参加了颁奖仪式。 会议伊始&#xff0c;龙锦益教授对王雪冬总监…

Jupyter Notebook 设置黑色背景主题

Jupyter Notebook 设置黑色背景主题 # 包安装 pip install jupyterthemes -i https://mirrors.aliyun.com/pypi/simple pip install --upgrade jupyterthemes # 查看可用主题 jt -l # monokai暗背景&#xff0c;-f(字体) -fs(字体大小) -cellw(占屏比或宽度) -ofs(输出段的字…