分治思想的应用

分治法查找数组元素的最大值和最小值(python实现) 分治法查找数组元素的最大值和最小值(python实现) 实验内容 给定任意几组数据,利用分治法的思想,找出数组中的最大值和最小值并输出 实验原理 利用分治法,将一个数组元素大于 2 的数组分成两个子数组,然后对每一个子数组递归调用,直到最小的子数组的元素个数为 1 个或者是 2 个,此时就能直接得出最大值与最小值,然后逐步往上合并子数组,比较 2 个子数组的最大值与最小值,依次进行下去,最后就能找到整个数组的最大值与最小值。 实验步骤 ① 先解决小规模的问题,如数组中只有 1 个元素或者只有两个元素时候的情 阅读详情

分治思想的应用

题目一:

在 n 个元素中找出最大元素和最小元素:

我们先使用朴素算法:

#include<iostream>
using namespace std;
#define MAXSIZE 200
int main()
{
	int a[MAXSIZE],n,num;
	cin>>n;
	for(int i=0;i<n;i++)
	{
		cin>>num;
		a[i] = num;
	}
	int max,min;
	max = min = a[0];
	for(int j=1;j<n;j++)
	{
		max = a[j]>max?a[j]:max;
		min = a[j]>min?min:a[j];
	}
	cout<<max<<" "<<min;
	return 0;
}

在获得最大最小值时对于n个数我们需要比较2(n-1)次 ,也就是说时间复杂度为2(n-1)

接下来我们用分治策略来处理这道题

T(n) = 2T(n/2) + Θ(1) n>1

T(n) = Θ(1) N=1

对于这n个数,我们分为两组,分别求出每一组的最大值和最小值,再比较这两组的最大值与最小值,使用递归即可简单的解决问题

直接上代码:

#include<iostream>
#define MAXSIZE 200
#define MAX(a,b) a>b?a:b;
#define MIN(a,b) a>b?b:a;
using namespace std;
void Max_Min(int i,int j,int &max,int &min,int a[])
{
	if(j-i==1)//递归的截至条件1(当n为偶数时)
	{
		if(a[j]>a[i])
		{
			max=a[j];
			min=a[i];
		}
		else
		{
			max=a[i];
			min=a[j];
		}
	}
	else if(j==i)//递归的截止条件2(当n为奇数时)
	{
		max=min=a[i];

	}
	else
	{
		int max1,max2,min1,min2;
		int mid = (i+j)/2;
		Max_Min(i,mid,max1,min1,a);//递归调用
		Max_Min(mid+1,j,max2,min2,a);//递归调用
		max=MAX(max1,max2);//获取每一步的最大值
		min=MIN(min1,min2);//获取每一步的最小值
	}
}
int main()
{
	int a[MAXSIZE],n,num;
	cin>>n;
	for(int i=0;i<n;i++)
	{
		cin>>num;
		a[i] = num;
	}
	int max,min;
	Max_Min(0,n-1,max,min,a);
	cout<<max<<" "<<min;
	return 0;
}


 

分治思想的应用之——二分法 分治算法是一种很常用的思想,当你遇到大问题的时候,你可能无从下手,那么我们就可以想想问题能不能用分治法解决呢?应用分治法必须需要满足两个条件:(1)一个大问题它能分解成若干个独立的子问题(2)每个子问题的求解过程都和大问题相似当满足条件的时候,我们就可以试着用分治算法解决问题在分治算法中有一种分支叫二分法,顾名思义,就是将问题一分为二,然后在分的算法。应用很广泛,譬如折半查找,它的时间效率比起正常 阅读详情

相关推荐

从《Cash》谈一类分治算法的应用

分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同.求出子问题的解,就可得到原问题的解.分治算法非常基础,但是分治的思想却非常重要,本文将从今年NOI的一道动态规划问题Cash开始谈如何利用分治思想来解决一类与维护决策有关的问题:

分治法查找最大和次大元素

问题描述:对于给定的含有n个元素的无序序列,求这个序列中最大和次大的两个不同元素。 问题求解:对于无序序列a[low..high],采用分治法求最大元素max1和次大元素max2的过程如下: (1)若a[low..high]中只有一个元素,则max1=a[low],max2=-INF(负无穷) (2)若a[low..high]中只有两个元素,则max1=max{a[low],a[high]},max2=min{a[low],a[h...

慢慢的博客 6510

密评实战:应用层数据安全防护全解析

本文从实战角度深度解析三级信息系统密评中应用层数据安全防护的核心要点。围绕身份鉴别、访问控制、数据传输与存储安全、不可否认性等关键环节,结合国密算法(SM2/SM3/SM4)与智能密码钥匙等合规技术,提供了从代码审查、日志分析到流量验证的全链路排查方法,助力构建真正符合密评标准的数据安全防线。

weixin_29291185的博客 460

分治法——查找问题 —— 寻找一个序列中第k小的元素和查找最大和次大元素

问题: 对于给定的含有n个元素的无序序列,求这个序列中第k(1<=k<=n)小的元素 分析思路: 假设无序序列存放在a[0 … n-1]中,若将a递增排序,则第k小的元素为a[k-1]. 对于无序序列a[s … t],在其中查找第k小的元素 (1)若s>=t,其中只有一个元素或没有任何 ...

gl620321的博客 7873

深入剖析STM32F103 I2C总线死锁问题及高效应对策略

本文深入剖析了STM32F103硬件I2C总线在轮询模式下发生死锁的根本原因,即硬件状态机的预取机制与软件响应速度不匹配。文章提供了高效的解决方案,包括在轮询模式下提前发送NACK/STOP信号、降低总线速度,以及治本的中断与DMA应用策略,帮助开发者根据项目需求选择最合适的方案,彻底解决这一经典硬件缺陷问题。

weixin_29184371的博客 206

继电器的选型规范

触点是继电器中最重要的结构件,触点的使用寿命受触点材料、触点上的电压及电流值(特别是接通时及断开时的电压、电流波形)、负载种类、切换频率、环境情况、接触形式、触点回跳现象等的影响,触点失效多以触点的材料转移、粘连、异常消耗、接触电阻增大等故障现象出现,使用时需要注意。为了稳定工作, DC 型继电器的线圈两端所加电压推荐使用波纹变化率小于±5%的线圈额定电压,否则继电器会工作不稳定,引起触点的粘接或异常损耗,特别是在继电器的驱动电路上连接有电动机、螺线管、变压器等器件时,这种情况更为明显。

qq_43416206的博客 1879

分治法求一个整数序列中的最大和最小元素

问题:设计一个算法,,采用分治法求一个整数序列中的最大和最小元素。 // 求解最大和最小元素算法 #include <stdio.h> #define max(x,y) ((x)>(y) ? (x):(y)) #define min(x,y) ((x)<(y) ? (x):(y)) #define INF 99999 // 表示最大的整数 void solve(int a[], int low, int high, int &Max,int &Min){

weixin_43710063的博客 5819

使用openair包分析气象数据

气象数据通常是有规律的时间序列,分析气象数据时需要对空气质量测量、气象数据和扩散模型输出进行分析。openair 是用于分析空气质量数据或更广泛的大气成分数据的R软件包。该软件包广泛应用于学术界、公共和私营部门。该项目最初由英国自然环境研究委员会(NERC)资助,并由英国环境部(Defra)提供额外资金。

Christina 2518

分治算法思想及应用

一. 分治算法介绍 1. 分治算法思想 2. 分治算法适用条件 3. 分治算法的引入 二. 分治算法的应用 1. 快速排序 2. 快排划分函数求topk问题 3. 归并排序 4. 合并k个有序单链表 5. 对数时间求中位数算法思想

qq_41721746的博客 5040

作物生长模型Oryza V3实战2:下载、安装与使用

摘要:ORYZA 现在的应用范围已从单一水稻作物模拟扩展到多个水稻作物模拟。我在csdn站内也上传了“作物生长模型oryza v3大全(含所有参数模板和4个校准程序1个分析工具)”,可以说是全网最全的吧。网上搜索一般下载的v3只有一个a3主程序,不适合作全面与深入的研究,本版本从国外下载回来,一开始少了一个“SoilHydrau.exe”文件,说是有病毒被隔离了,后经历各种技术手段,并向国际水道研究所发送邮件,才得以补全所有的参数化及校准程序、分析工具,来之不易,有缘人得之。

502

tsmc12: m0po max length问题(H384.M0_PO.L.1)

手动调整可以挪cell,制造上下两个row相对的至少一个site的空间,通过插普通filler来解决,这里需要注意的是,tsmc12有via0的规则,需要让via0落在via0 grid上。在pt eco之后会有一些m0po max length问题出现,大部分问题都可以通过替换decap来解决,少部分由于局部density过高,需要手动调整。更多学习内容请关注「拾陆楼」知识星球。#ICC2中替换decap的参考脚本。

m0_61544122的博客 790

分治思想与应用

分治减治思想分治算法分:治:分解:适用场景例题:二分查找: 分治算法 分治算法就是分而治之。分治分治,分为两部分,分和治。 分: 划分子问题,讲一个问题划分成若干个独立的具有共性的子问题。 治: 求解每个子问题。 分解: 分解子问题的原则: 子问题与原问题性质相似。 子问题规模较小(有解) 合并:把每个子问题的解合并成原问题的解 适用场景 在一个较小规模上得到解 该问题上有最有子结构 每个子问题的解,可以合并为原问题的解 例题:二分查找: ###给定一个升序有序数组,要求找到到值为key的元素的位置

Invisible的博客 462

Android/Linux驱动开发:使用dev_dbg进行设备驱动调试

在本文中,我们将介绍如何使用dev_dbg宏和相关的函数来进行设备驱动调试。函数在该目录下创建了一个名为"debug"的debugfs文件。在这些函数中,您可以执行与您的设备驱动相关的调试操作。函数在该目录下创建了一个名为"debug"的debugfs文件。在这些函数中,您可以执行与您的设备驱动相关的调试操作。的结构体指针,其中包含了我们定义的文件操作函数。的结构体指针,其中包含了我们定义的文件操作函数。在上面的示例中,我们首先通过调用。在上面的示例中,我们定义了。在上面的示例中,我们定义了。

ByteKnight的博客 372

递归和分治思想及其应用

递归和分治思想 一些实例 逆序输出字符串 查找数组元祖是否存在 汉诺塔问题 八皇后问题 更多递归和分治思想 如果可以使用迭代,尽量别使用递归。由编译原理可以知道,每次自调用的时候,计算机都需要保存在调用,浪费时间空间。当然,迭代是当我们知道循环次数的时候。而当我们不知道循环次数,比如说对于文件夹和文件进行遍历,不知道深度的情况下,我们就需要递归来实现。 显然,递归是先解决小的问题,这种思想是

GodBMW的博客 916

Linux:安装Debian最新10.x操作系统(超详细)

安装Debian最新10.x操作系统安装Debian最新10.x操作系统1.下载Debian镜像2. 镜像安装引导启动页面,选择图形化安装:选择语言、时区,选中后点击continue:选择键盘模式:配置Hostname主机名,设置Root密码创建普通用户名和密码,进入磁盘分区步骤,选择“所有文件放在同一个分区”确认分区信息磁盘配置完,进入软件安装模块:选择源:进入软件包配置,等待配置结束根据需要选择软件包安装3. 安装完成重启后登录使用 安装Debian最新10.x操作系统 1.下载Debian镜像 下载D

HowieXue 薛永浩的博客 3万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

分治思想及应用

@[TOC]分治思想及案例 分治思想:把一个任务,分成规模小但与原任务等价目的的方法,当几个小任务完成时,原任务也就完成了。 先讲一个比较通俗易懂的例子(称假币),每次分为两半,哪边轻的就再对半分,知道最后两个,最多花log2N的次数,非常快。 例1:归并排序 #include using namespace std; int a[10]={13,27,19,2,8,12,2,8,30,89}; int b[10]; int main() { int size =sizeof(a)/sizeof(int);

zjsru_Beginner的博客 249

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

分治法 Divide and Conquer思想及实际应用

Divide and Conquer,即为分治法,基于分支递归的一种解决问题的思想方法。分治法可用于分析和解决的问题举例:归并排序、二分查找、链表反转、n次幂值计算等。

lpp 7594

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

归并排序-分治思想的典型应用

前面的文章讲了二分查找算法,这种算法使用了一种非常常见的思想–“分治思想”。所谓分治,就是"分而治之",当解决一个大问题时,如果问题太大而无法直接解决,就可以试着把问题分解成很多个相互独立的子问题,将每个子问题各个击破,最后每个子问题得到的结果一合并就得出了原问题的结果,分治法一般都通过递归实现。本文讲解的归并排序就是分治思想的经典应用。 一.基本思想 分解:给出包含若干个数的一段序列。按照分治思想要把序列分成两部分,然后对每个部分,再以相同的方式分成两个更小的序列。就这样一直分下去,到最后每段序列.

qq_45329226的博客 539

《递归算法设计:汉诺塔问题与分治思想的结合应用》

(答:设移动n层圆盘需T(n)步,递推式T(n)=2T(n-1)+1,解得T(n)=2ⁿ-1,故时间复杂度O(2ⁿ)。◦ 定义:若递归调用是函数的最后一步操作,可优化为迭代(如汉诺塔递归可改写为尾递归)。(答:通过栈模拟递归栈,记录每一步的源柱、目标柱、辅助柱状态,按规则迭代移动。◦ 有3根柱子(A、B、C),A柱上叠放n个直径不同的圆盘(下大上小);◦ 斐波那契数列(递归计算F(n)=F(n-1)+F(n-2));◦ 阶乘计算(fact(n)=n×fact(n-1))。

2501_91651594的博客 552

分治法:算法思想与应用实例

分治法是一种强大的算法设计策略,通过将复杂问题分解成若干个子问题,并递归地解决这些子问题,最终将子问题的解合并成原问题的解。希望你喜欢这篇文章!如果有更多问题,欢迎随时提问。

m0_64974617的博客 1970

分治法的思想与应用 Java

一:分治法的思想 分治法(divide_and_conquer),通俗的来说,要想统治一片领土,可以把这片领土进行分解成若干块小部分,然后一块块地征服,直到所有的小土地都被征服了之后,意味着征服了这一片领土。 分治法的思想分为三部分: 分(divide):将问题分解成规模更小的子问题 治(conquer):将这些子问题逐个解决,若子问题规模较小而且容易解决则直接解,否则递归解

一只默默写博客的小白 1944

决策树详解:从分治思想到实践应用

HD−∑i1kpilog⁡2piHD−i1∑k​pi​log2​pi​其中,(D) 为数据集,(k) 为类别数,(p_i) 为第 (i) 类样本占比。物理意义:熵值越大,数据不确定性越高。例如,抛硬币时正反概率各50%,熵值 (H=-\left(0.5\log_20.5 + 0.5\log_20.5\right)=1),不确定性最大;若硬币必为正面,熵值 (H=0),无不确定性。

2401_86968005的博客 933

【算法】——分治思想与快速排序的实践应用

本文介绍了快速排序算法及其应用。快速排序采用分治思想,通过选取基准值、分区和递归三个步骤实现,时间复杂度为O(n*lgn)。文章详细讲解了Hoare方法和三区间划分两种实现方式,并给出C++代码示例。通过三个实例展示了快速排序的实际应用:颜色分类问题、数组排序和TopK问题。在解决TopK问题时,快速排序能通过舍弃无关区间显著提高效率。文章配有代码示例和详细解释,帮助读者理解快速排序的实现原理和实际应用场景。

2301_80260747的博客 1404
上一篇: 轮盘赌选择解决思路
下一篇: 分治思想的应用2
cassiePython
博客等级 码龄12年 303粉丝 135原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值