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

server/2024/9/24 7:38:44/

分治法目录

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

一.分治法的思想

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

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

二.分治法的步骤

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

三.举个例子

我(你)是一个超级大帅哥,在相亲节目上被许多美女看上.
但是我想找一个身高跟我一样的美女.
于是节目组从低到高的给我排了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.ppmy.cn/server/101077.html

相关文章

等保测评与信息安全技术发展趋势:构建未来信息安全的坚实基石

随着信息技术的飞速发展&#xff0c;信息安全已成为保障社会稳定与经济发展的关键因素。等保测评作为我国信息安全等级保护制度的核心内容&#xff0c;不仅反映了当前信息安全技术的发展水平&#xff0c;也预示了未来信息安全技术的发展趋势。本文将探讨等保测评与信息安全技术…

Doc2Vec

Doc2Vec 是一种扩展自 Word2Vec 的算法&#xff0c;它不仅可以生成词向量&#xff0c;还可以生成句子或文档的向量。下面是一个使用 Doc2Vec 比较两个句子的具体过程&#xff1a; 步骤 1: 训练 Doc2Vec 模型 首先&#xff0c;你需要有一个训练好的 Doc2Vec 模型。训练过程大致…

硬件工程师必须掌握的MOS管详细知识

MOS管&#xff0c;全称为金属-氧化物半导体场效应晶体管&#xff08;Metal-Oxide-Semiconductor Field-Effect Transistor&#xff0c;MOSFET&#xff09;&#xff0c;是一种重要的半导体器件&#xff0c;广泛应用于电子工业中各种电路的开关、放大、调制、数字电路和模拟电路等…

Centos-7 yum 安装MariaDB-server-compat-11.5.2

Centos-7 yum 安装MariaDB-server-compat-11.5.2 1、yum update -y 报如下错误&#xff1a; curl#6 - "Could not resolve host: mirrorlist.centos.org; Unknown error" ... Cannot find a valid baseurl for repo: base/7/x86_64 或者 Could not retrieve mirrorl…

Cat1智能电表:技术优势与应用注意事项

Cat.1(Category1)智能电表&#xff0c;作为新一代智能计量解决方案&#xff0c;其核心优势在于低功耗广域网络(LPWAN)技术的应用&#xff0c;特别是4GLTECat.1蜂窝网络标准的集成。这不仅提升了数据传输的稳定性和安全性&#xff0c;还优化了远程管理能力&#xff0c;为电力行业…

软件运维实施维保方案(Doc完整版原件)

1.项目情况 2.服务简述 2.1服务内容 2.2服务方式 2.3服务要求 2.4服务流程 2.5工作流程 2.6业务关系 2.7培训 3.资源提供 3.1项目组成员 3.2服务保障 软件全套资料部分文档清单&#xff1a; 工作安排任务书&#xff0c;可行性分析报告&#xff0c;立项申请审批表&#xff0c;产…

Xil_DCacheFlushRange的用法

概述&#xff1a; 当使用Zynq的PS (Processing System) 与PL (Programmable Logic) 进行通信时&#xff0c;特别是涉及到高速数据传输时&#xff0c;可能会遇到缓存一致性问题。这是因为处理器系统通常具有缓存机制来加快对常用数据的访问速度&#xff0c;但在某些情况下&…

遗传算法与深度学习实战(4)——遗传算法详解与实现

遗传算法与深度学习实战&#xff08;4&#xff09;——遗传算法详解与实现 0. 前言1. 遗传算法简介1.1 遗传学和减数分裂1.2 类比达尔文进化论 2. 遗传算法的基本流程2.1 创建初始种群2.2 计算适应度2.3 选择、交叉和变异2.4算法终止条件 3. 使用 Python 实现遗传算法3.1 构建种…