【数据结构与算法】分治法

news2024/11/17 1:46:04

分治法目录

  • 一.分治法的思想
  • 二.分治法的步骤
  • 三.举个例子
  • 四.具体实现
  • 五.完整代码

一.分治法的思想

将一个大问题,拆解成为若干个小问题,而且大问题与小问题的解决方法一样.
说到这里我们可以联想到递归,没错就是用递归的思想.

分:递归解决较小的问题
治:子问题的解构建原问题的解

二.分治法的步骤

  • 分解:将原问题分解若干个规模较小,相互独立,与原问题形式相同的子问题.
  • 解决:若子问题规模较小而容易被解决则直接解决,否则递归的解决各个子问题.
  • 合并:将各个子问题的解合并为原问题的解.

三.举个例子

我(你)是一个超级大帅哥,在相亲节目上被许多美女看上.
但是我想找一个身高跟我一样的美女.
于是节目组从低到高的给我排了10个妹子,但是有一堵墙,我看不到她们,只能问他她们.
节目组给我打包票里面有一位身高跟我一样,而且还是个国色天香.
但是只给我4次的询问机会,如果4次内找到就领回家,否则就答应节目组与翠花交往.
在这里插入图片描述

在这里插入图片描述
我想了一想,区区小事,何足挂齿,就答应了下来.

四.具体实现

假设这就是那10位美女的身高,而我的身高是192.
在这里插入图片描述
我心想,如果直接问未免有点太靠运气了吧,我可绝对不想与翠花交往.
那我就要保证4次内必须问到我的身高.

就在这时,我突然想到,既然是按顺序排的,那我何不从中间问起,一下就可以排除一半.
然后在剩下的一半中,我还是从中间问起,一下又可以排除一半.

哈哈哈,我来了
在这里插入图片描述
在这里插入图片描述
每次都是比较中间的,大就继续比较大的那部分中间,小就比较小的那部分中间.
运行结果:
在这里插入图片描述
最后用了三次就抱得美人归,可把翠花气坏了!

五.完整代码

#include <iostream>

using namespace std;

int BinarySearch(int* array, int min, int max, int num)
{
	if (min > max)
	{
		return -1;
	}
	int mid = (min + max) / 2;
	if (array[mid] == num)
	{
		return mid;
	}
	else if(array[mid]>num)
	{
		return BinarySearch(array, min, mid - 1, num);
	}
	else
	{
		return BinarySearch(array, mid+1, max, num);
	}
}

int main()
{
	int array[] = { 161,163,165,170,172,179,185,188,192,199};
	int length = sizeof(array) / sizeof(array[0]);
	cout << length << "位美女的身高分别为:" << endl;
	for (int i = 0; i < length; i++)
	{
		cout << array[i] << " ";
	}
	cout << endl;

	cout <<"192身高的下标为:";
	int index = BinarySearch(array, 0, 9, 192);
	cout << index << endl;

	system("pause");
	return 0;
}

2024年8月16日20:51:18

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

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

相关文章

RTX 4070 GDDR6显存曝光:性能与成本的平衡之选

近期&#xff0c;关于NVIDIA RTX 4070新显卡的信息曝光&#xff0c;这款显卡将配备较为缓慢的GDDR6显存&#xff0c;而非更高性能的GDDR6X。这一配置的选择引发了业内的广泛关注&#xff0c;特别是在性能与成本的平衡问题上。 新版RTX 4070 OC 2X的核心特点 **1.显存类型与带…

Python | Leetcode Python题解之第341题扁平化嵌套列表迭代器

题目&#xff1a; 题解&#xff1a; class NestedIterator:def __init__(self, nestedList: [NestedInteger]):# 对于nestedList中的内容&#xff0c;我们需要从左往右遍历&#xff0c;# 但堆栈pop是从右端开始&#xff0c;所以我们压栈的时候需要将nestedList反转再压栈self.…

数据结构----链表

一丶概念 链表又称单链表、链式存储结构&#xff0c;用于存储逻辑关系为“一对一”的数据。 和顺序表不同同&#xff0c;使用链表存储数据&#xff0c;不强制要求数据在内存中集中存储&#xff0c;各个元素可以分散存储在内存中。 二丶特点 特点&#xff1a;内存不连续…

《SPSS零基础入门教程》学习笔记——02.数据管理

文章目录 2.1 连续变量的离散化2.2 自动重编码、编秩与数值计数2.3 几个常用过程2.4 多个数据文件的操作2.5 数据字典2.6 数据核查&#xff08;1&#xff09;数据验证模块&#xff08;2&#xff09;数据检验 2.7 数据准备 计算新变量&#xff08;转换 -> 计算变量&#xff0…

VueUse 基于 Vue 3 Composition API 的高质量 Hooks 库

VueUse 是什么? VueUse 是基于 Vue 3 Composition API 的高质量 Hooks 库。例如获取滚动的距离 VueUse 官网:VueUse | VueUse VueUse 什么使用? 1、通过npm安装 VueUse npm i @vueuse/core 2、搜索需要使用的函数,例如搜索 useScroll 滚动 3、使用useScroll 滚动函数 …

使用RKNN在Orange Pi 5 (RK3588s) 上部署推理PPO深度学习模型

文章目录 一、前言1️⃣、Orange Pi 是什么&#xff1f;2️⃣、PPO 是什么&#xff1f;3️⃣、RKNN 是什么&#xff1f;3️⃣、ONNX 是什么&#xff1f; 二、项目简介三、部署流程1️⃣、PPO 网络结构2️⃣、PPO 输出模型&#xff0c;模型转换&#xff0c;以及对比检查3️⃣、.…

httplib库:用C++11搭建轻量级HTTP服务器

目录 引言 一. httplib库概述 二. httplib核心组件 2.1 数据结构 2.2 类和函数 2.3 服务器搭建 ​编辑 结语 引言 在现代软件开发中&#xff0c;HTTP服务是网络应用的基础。对于需要快速搭建HTTP服务器或客户端的场景&#xff0c;使用成熟的第三方库可以极大提高开发效…

微软运行库全集合:一站式解决兼容性问题

开发者在部署应用程序时经常遇到因缺少运行库而引发的兼容性问题。为了解决这一问题&#xff0c;电脑天空推荐微软常用运行库合集&#xff0c;一个集成了微软多个关键运行库组件的软件包。 &#x1f4da; 包含组件概览&#xff1a; Visual Basic Virtual Machine&#xff1a;…

电销机器人助力企业节约成本提升业绩

电销系统机器人 的出现对企业来说不但仅是提高一点工作效率这么简单。首先从拨打电话上来看&#xff0c;电销系统机器人每日能够拨打几千通、上万通电话无上线&#xff0c;都可自行设置&#xff0c;并且并不会感觉到累&#xff0c;更不会由于被挂掉电话而影响心情&#xff0c;这…

KNN算法-opencv的运用

文章目录 opencv介绍与安装KNN算法中opencv的运用1.数据介绍2.图片处理3.图像切分与重组4.分配标签5.模型构建与训练6.预测结果7.模拟测试8.代码及详注 opencv介绍与安装 OpenCV&#xff08;Open Source Computer Vision Library&#xff0c;开源计算机视觉库&#xff09;是一…

ShareSDK Twitter

创建应用 1.登录Twitter控制台并通过认证 2.点击Developer Portal进入Twitter后台 3.点击Sign up for Free Account创建应用 4.配置应用信息 以下为创建过程示例&#xff0c;图中信息仅为示例&#xff0c;创建时请按照真实信息填写&#xff0c;否则无法正常使用。 权限申请…

智能安全守护,寺庙安全用电解决方案

在四川省蓬溪县城北&#xff0c;高峰山以其千年的历史沉淀和独特的文化风貌&#xff0c;默默诉说着道教与佛教交融的传奇。然而&#xff0c;2017年5月31日凌晨的一声巨响&#xff0c;打破了这里的宁静&#xff0c;一场突如其来的大火&#xff0c;让这座承载着无数信徒信仰与梦想…

10步搞定Python爬虫从零到精通!

学习Python网络爬虫可以分为以下几个步骤&#xff0c;每一步都包括必要的细节和示例代码&#xff0c;以帮助你从零开始掌握这一技能。 第一步&#xff1a;理解网络爬虫基础 什么是网络爬虫&#xff1f; 网络爬虫是一种自动化程序,用来从互联网上收集数据.它通过发送 HTTP 请求…

大学生科创项目在线管理系统的设计与实现

TOC springboot267大学生科创项目在线管理系统的设计与实现 第1章 绪论 1.1选题动因 当前的网络技术&#xff0c;软件技术等都具备成熟的理论基础&#xff0c;市场上也出现各种技术开发的软件&#xff0c;这些软件都被用于各个领域&#xff0c;包括生活和工作的领域。随着电…

爬虫案例4——爬取房天下数据

简介&#xff1a;个人学习分享&#xff0c;如有错误&#xff0c;欢迎批评指正 任务&#xff1a;从房天下网中爬取小区名称、地址、价格和联系电话 目标网页地址&#xff1a;https://newhouse.fang.com/house/s/ 一、思路和过程 目标网页具体内容如下&#xff1a; ​​​​ …

揭秘面试必备:高频算法与面试题全面解析

干货分享&#xff0c;感谢您的阅读&#xff01; &#xff08;暂存篇---后续会删除&#xff0c;完整版和持续更新见高频面试题基本总结回顾&#xff08;含笔试高频算法整理&#xff09;&#xff09; 备注&#xff1a;引用请标注出处&#xff0c;同时存在的问题请在相关博客留言…

Web安全:SqlMap工具

一、简介 sqlmap 是一款开源的渗透测试工具&#xff0c;可以自动化进行SQL注入的检测、利用&#xff0c;并能接管数据库服务器。它具有功能强大的检测引擎,为渗透测试人员提供了许多专业的功能并且可以进行组合&#xff0c;其中包括数据库指纹识别、数据读取和访问底层文件系统…

SystemUI手势操作隐藏显示导航栏

在Android 12中&#xff0c;通过SystemUI手势操作来隐藏和显示导航栏主要涉及对系统UI的定制和编程控制。以下是一些实现这一功能的方法&#xff1a; 第一类. 使用WindowInsetsController Android 12引入了一个新的WindowInsetsController类&#xff0c;它允许开发者更好地控…

加速科技精彩亮相2024中国(深圳)集成电路峰会

8月16日&#xff0c;2024中国&#xff08;深圳&#xff09;集成电路峰会&#xff08;简称“ICS2024峰会”&#xff09;在深圳如期开展&#xff0c;为行业带来一场技术盛宴。在这场盛会中&#xff0c;加速科技携2款核心产品——ST2500EX、ST2500E重磅亮相&#xff0c;凭借领先的…

【leetcode详解】特殊数组II : 一题代表了一类问题(前缀和思想)

前缀和的优势 给定一个数组&#xff0c;前缀和的特点在于&#xff0c;任意给出一对始末位置&#xff0c;能够用O(1)的时间复杂度得到始末位置之间所有元素的某种关系。 题型分析 这道题目正是“给出始末位置&#xff0c;检测其中元素特点”那一类&#xff0c;那我们就想&#…