第一章、分治法(案例:二分搜索算法)与递归算法

0003算法笔记——【分治法】分治法与二分搜索,棋盘覆盖问题 1、分治法 分治法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题相互独立且与原问题相同。递归的解这些子问题,然后将各子问题的解合并得到原问题的解。      分治法所能解决的问题一般具有以下几个特征:   1) 该问题的规模缩小到一定的程度就可以容易地解决   2) 该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质。   3) 利用该问题分解出 阅读详情

算法分析

第一章、分治法(案例:二分搜索算法)与递归算法

##基础概念##

  • 分治法:将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。(分解、治理、合并;简称:分-治-合)
  • 递归:直接或间接地调用自身的算法称为递归算法。用函数自身给出定义的函数称为递归函数。

##案例##

  1. 二分搜索算法

在这里插入图片描述
在这里插入图片描述
主要方法体:
在这里插入图片描述

#include<iostream>
using  namespace std;

```cpp

bool BinarySearch(int a[], int n, int x, int&i, int&j){
	int left = 0;
	int right = n - 1;
	while (left <= right){
		int mid = (left + right) / 2;
		if (x == a[mid]){
			i = j = mid;
			return true;
		}
		if (x > a[mid]){
			left = mid + 1;
		}
		else{
			right = mid - 1;
		}
	}
	i = right;
	j = left;
	return false;
}
int main(){
	int array[11];

	int key, i=0, j;
	cout << "原始数据为" << endl;
	for (int i = 0; i < 11; i++){
		cout << endl << "请输入需要查找的数组的第" <<i<<"个数"<< endl;
		cin >> array[i];
	}
	cout << "待查找的数组为:";
	for (int i = 0; i < 11; i++)
		
		cout << array[i] <<" ";
	cout << endl << "请输入待查找的数据" << endl;
	cin >> key;

	bool findInt = BinarySearch(array, 11, key, i, j);
	if (findInt){
		cout << "find the Value at" << i << endl;
	}
	else{
		cout << "not find" << endl
			<< "比待查数据大的数下标为:" << j << endl
			<< "比待查数据小的数下标为:" << i << endl;
	}
	return 0;
}

 


  1. 集合划分问题:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
由递归可得:
F(n,m)=0 , m>n或m=0;
F(n,m)=1,m=1或n=m>0;
F(n,m)=m*F(n-1,m)+F(n-1,m-1);

代码:

#include<iostream>
using namespace std;
int f(int n, int m){
	if (m == 1 || n == m)
		return 1;
	else
		return f(n - 1, m - 1) + f(n - 1, m)*m;
}

int main(){
	int n;
	cout << "请输入集合的元素个数" << endl;
	cin >> n;
	while (n > 1){
		int i = 0, j = 0;
		int sum = 0;
		for (i = 1; i <= n; i++){
			j = f(n, i);
			cout << "f(" << n << ", " << i << ") = " << j << endl;
			sum += j;
		}
		cout << "集合" << n << "的所有划分数为:" << sum << endl;
		cout << endl << "请输入集合的元素个数" << endl;
		cin >> n;
	}
	return 0;
}

关于递归循环的总结(包含题目解析与思路) C语言函数————递归(曾经困扰我很久的问题) 相信大家在一开始学习函数这一章节的时候,像我这样的白痴脑袋曾经被递归这一算法思想困扰了很久。 所以这样一篇博客早已是大一上学期刚学完递归后的我想总结的小节,这不刚放寒假嘛,赶紧抓住这一时机,写下了这样一篇博客~ 希望大家看完发现错误后能即使留言批评与纠正。 首先先介绍一下递归 递归,顾名思义,就是套娃(doge)。所以刚开始作为刚接触语言学习的我来说,我就纯把递归理解为循环了,因为都是对代码的反复使用。虽说这样理解好像没啥很大的毛病,因为可以使用循环的地方通常 阅读详情

相关推荐

递归算法——超详细讲解(图文并茂)

To iterate is human,to recurse divine. ---L.Peter Deutsch 这句经典名言体现了递归算法的重要性,虽然执行效率不如迭代法,但它可以使那些很复杂的问题化成简单化。 什么是递归呢? 把一个直接调用自己或通过一系列的调用语句间接地调用自己的函数,称为递归函数。简言之:在定义自身的同时又出现自身的直接或间接调用。 注意:递归必须要有一个退出的条件! 用例题来说明其中的原理。 例1:求 n!。 【方法一:迭代法】 #include <st

weixin_46312449的博客 8万+

递归与循环

一.递归与循环 **递归,说白了就是自己调用自己.**理论上,任何的循环都可以重写为递归形式,所有的递归也可以被表述成循环的形式,本文主要介绍如何将循环重写为递归。 二.循环改递归的两大要点 发现逻辑“相似性” 不要忘记递归的“出口” 小例子: public class demo{ public static void main(String[] args){ for(...

李就良的博客 1675

C语言实现二分搜索算法

引言:    这是我写的第一篇关于算法的文章,因为在计算机科学中,分治法的使用频率高,而且,分治法的思想简单“分而治之”,就是将一个难以直接解决的大问题,分割成一些规模较小的相同问题。但是思想虽然简单却是一种很重要的算法。下面是分治法求解的一个经典问题“二分搜索算法”。题目:    给定已按升序排好序的n个元素a[0:n-1],现要在这n个元素中找出一特定元素x。分析:二分搜索算法(折半查找法)是...

船桨的博客 1万+

算法设计与分析——递归循环

递归的定义若一个对象部分地包含它自己, 或用它自己给自己定义, 则称这个对象是递归的;若一个过程直接地或间接地调用自己, 则称这个过程是递归的过程。 递归函数:一个直接调用自己或通过一系列调用语句间接调用自己的函数。 递归的应用:数学函数:阶乘函数、2阶Fibonacci数列 数据结构:二叉树、广义表 八皇后、hanoi塔问题 递归算法设计:将规模较大的原问题分解为一个或多个规模更小的与原问题类似的子问题-递归步骤(递归表达式) 确定一个或多个无须分解可直接求解的子

沐雨风栉 2712

分治法与递归:如何写出高效的分治算法

在计算机科学的世界里,我们常常会遇到各种复杂的问题,这些问题可能规模很大,处理起来非常困难。分治法和递归就是我们手中的两大法宝,它们能帮助我们把复杂的大问题拆分成简单的小问题,然后逐个击破。本文的目的就是要详细介绍分治法和递归,教大家如何利用它们来设计出高效的分治算法。我们会涵盖分治法和递归的基本概念、核心算法原理、实际应用场景等内容,让大家对分治算法有一个全面的了解。本文将按照以下结构进行介绍:首先会引入一些有趣的故事,帮助大家理解分治法和递归的概念;

AI 算法实战派 768

软件设计师之算法设计:分治法与递归的深度解析

大家好!在软件开发的学习和实践中,算法设计的方法多种多样,其中分治法和递归技术是非常重要且常用的手段。今天,咱们就一起深入探讨这两种技术,希望能在交流中共同进步,更好地掌握它们在算法设计中的应用。

wj_rdk的博客 1776

【算法课】递归与分治法

概述 算法 若干指令组成的有穷序列。 输入:零或多个外部输入 输出:至少一个输出 确定性:每条指令无歧义 有限性:每条指令执行次数有限,总运行时间有限 复杂性 分时间和空间复杂性。 计算时间复杂度的时候,通过计算其核心语句的执行次数,导出其关于问题规模N的复杂度计量T(N)。 而当N→∞,T(N)→∞。此时通过求T(N)的渐进式来简化复杂度计量。引入渐进意义下记号:O、Ω、θ和o...

weixin_38966732的博客 7427

递归与循环的理解与应用(Java)

循环通常包含一个循环条件和一段需要重复执行的代码块,在每次循环迭代时检查循环条件,当条件满足时继续执行循环体,否则退出循环。递归和循环是编程中常用的两种迭代方式,它们都可以用于解决重复执行相同或类似任务的问题。递归函数在执行时会将问题分解为更小的子问题,并通过不断调用自身来解决这些子问题,直到达到递归终止条件。使用场景:递归适用于问题可以分解为相同或类似子问题的情况,每个子问题的解决方式与原问题相同。实现方式:递归是通过函数自身的调用来实现迭代,而循环是通过控制条件和循环变量来控制迭代次数。

PqCybersecurity的博客 744

【算法分析与设计】递归与分治策略

计算机算法分析与设计中有关递归与分治策略的讲解,主要包括学习要点、算法总体思想、递归的概念、分治法

東方緋想天 1536

AVS3代码阅读HPM4.0

参考AVS3代码阅读(HPM6.0)(一.整体架构以及CU划分部分代码) 版本:HPM4.0 核心文件:app_encoder.c   要做的是帧间预测,所以前面的函数先暂时不管了,挖个坑以后再填。直接从enc_pic看起。 enc_pic()    ...

CRR的博客 3187

USB设备识别码VID和PID详解:如何查询和自定义你的设备ID

本文详细解析了USB设备识别码VID和PID的核心作用、查询方法及自定义配置技巧。VID(供应商识别码)和PID(产品识别码)是USB设备的唯一身份证,用于驱动匹配和功能识别。文章提供了Windows和Linux系统下的查询方法,并探讨了如何合法获取和自定义VID/PID,适合硬件开发者和DIY爱好者参考。

weixin_29168675的博客 1454

算法分析与设计实验报告——二分搜索算法的实现

算法分析与设计实验报告——二分搜索算法的实现 目录:算法分析与设计实验报告——二分搜索算法的实现一、 实验目的二、实验要求三、 实验原理四、 实验过程(步骤)五、 运行结果六、实验分析与讨论七、实验特色与心得附件一 实验过程(步骤)附件二 运行结果 一、 实验目的 掌握分治法的基本思想,建立算法复杂度的理论分析与实验分析的联系,深刻体会算法复杂度作为算法的好坏评价指标的本质含义。 二、实验要求 用c++语言实现二分搜索算法,分析时间复杂性。实现二分搜索的递归与非递归程序,并进行跟踪分析其执行过程,体会两者

千色千寻的博客 8748

2025最新聚合易支付官方完整版 – 全开源

2025聚合易支付5.0全开源版引领下一代智能支付革命,以"开放·智能·可信"为核心理念,成为全球首个通过量子安全认证的开源支付系统。该系统具备三大突破性创新:AI原生风控架构、跨链支付协议和零信任安全体系,支持百万级TPS处理能力。技术亮点包括Rust异步框架、Llama3风控模型、Polkadot跨链方案及IPFS分布式存储。提供量子安全支付、智能路由、元宇宙支付等六大功能,并通过开放原子基金会认证,构建了包含1200+全球开发者的开源生态。

meng1325200的博客 784

递归与分治法经典例子

文章目录关于算法递归与分治法基本概念递归经典例子hanoi塔分治法经典例子整数排列(全排列问题)*整数划分*二分搜索*大数乘法棋盘覆盖合并排序、归并排序循环赛程表最接近点对 关于算法 问题1:算法基本概念/算法和程序:定义和区别是什么? 概念/定义和区别: 算法:指解决问题的方法或过程。 程序:是算法用某种程序设计语言的具体实现。 程序可以不满足算法性质的有限性。 问题2:算法的复杂性统计/...

MOKE_SPACE 2507

先楫HPM6E00EVK EtherCAT从站配置与CIA402 8轴运动控制实战解析

本文详细解析了先楫HPM6E00EVK开发板的EtherCAT从站配置与CIA402 8轴运动控制实战。从环境准备、XML文件配置、代码移植到TwinCAT工程设置,提供了完整的移植指南,帮助开发者实现高效的多轴同步运动控制。

o5p6q的博客 415

【C++】ROS:ROS1环境配置与基础示例

ROS1环境配置与基础示例

DevFrank的博客 2103

算法笔记(一):递归与分治法

一、基本思想 (一)分治法的基本思想是:将规模较大的、不容易解决的大问题,分割为性质相同但规模较小的子问题,若子问题易于求解,则分别求解子问题,然后由子问题的解构造出原问题的解。适合用分治法求解的问题一般都具有以下基本特征: (1)该问题可以分解为若干个规模较小的子问题; (2)该问题的规模缩小到一定的程度后容易求解; (3)各个子问题相互独立; (4)子问题的解可以合并为原问题的解。 分治法求解问题的步骤主要包括三步: (1)分解(Divide)。当问题的规模超过某一阈值时,将问题分解为规模较小但性质与原

Hoshizola的博客 1312

工业-实时数据采集

在主节点使用Flume采集/data_log目录下实时日志文件中的数据,将数据存入到Kafka的Topic 中(Topic名称分别为ChangeRecord、ProduceRecord和EnvironmentData,分区数为4),Flume 采集ChangeRecord。

dafsq的博客 590

【算法】分治法的基本思想和二分搜索的应用

分治法它的基本思想是将一个大问题分解成若干个与原问题相似的小问题,用相同的方法递归地解决这些小问题,最后将这些小问题的解合并起来,得到原问题的解决方案。 分治法所能解决的问题一般具有以下特征: 该问题的规模缩小到一定的程度就可以容易地解决。 因为问题的计算复杂性一般是随着问题规模的增加而增加,因此大部分问题满足这个特征。 该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质。 这条特征是应用分治法的前提,它也是大多数问题可以满足的,此特征反映了递归思想的应用。 利用该问题分解出的子问

努力让自己的能力配得上梦想. 1192

基于QT+Halcon实现线序识别

一、线序识别算法步骤。 1.按照检测区域m_pItem1的外接矩形(rtBount)的大小, 截取感兴趣区域图像hRoi。 2.把截取出来的感兴趣区域图像hRoi, 分离出R、G、B三个通道hRed、hGreen、hBlue。 3.把hRed、hGreen、hBlue三个通道转换成cielab颜色空间, 得到hChannelL、hChannelA、hChannelB三个颜色图。 4.设m_pItem1的宽为iItemW, 高为iItemH. 分别申请大小为iItemW的pSumL、pSumA、pSumB内

专注现代C++实战,从核心语法到高性能编程,助力开发者深入掌握系统级编程精髓。 1748

从SOMEIP看SOA,汽车电子电器架构的转变

从SOMEIP看SOA,汽车电子电器架构的转变

天赐好车的博客 241

算法设计与分析——分治法

通俗的来说:就是把一个问题分解成为大小相同的k个子问题是比较不错的。(事实上这种使子问题大致相同的做法是一种自平衡子问题的思想)。 定义: 分治法的思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同。 解决方法: 我们可以递归的解决这些子问题,然后将这些小的子问题和原问题合并,进而各个击破,达到解决整个原问题的目的! 分治算法分解为多少个子问题比较的合适呢? 其...

邵光亮的博客 14万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

二分搜索算法java_Java分治法与二分搜索算法实例分析

本文实例讲述了Java分治法与二分搜索算法。分享给大家供大家参考,具体如下:1、分治法分治法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题相互独立且与原问题相同。递归的解这些子问题,然后将各子问题的解合并得到原问题的解。分治法所能解决的问题一般具有以下几个特征:1) 该问题的规模缩小到一定的程度就可以容易地解决2) 该问题可以分解为若干个规模较小的相同问题,即该问题具有最优...

weixin_39715652的博客 338

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

【算法设计与分析】(二)什么是递归,以及分治法的基本思想

本文探讨了递归和分治法的核心原理与应用。递归通过分解问题为更小的同类问题解决,需明确基线条件和递归调用,并用阶乘计算示例说明。分治法遵循"分解-解决-合并"三步策略,以二分查找为例展示其高效性。文章还详细解析了归并排序和快速排序的分治实现,归并排序通过递归分解与合并确保O(n log n)时间复杂度,而快速排序基于基准值分区实现高效排序。两种方法均体现了分治思想在算法设计中的重要性。

2402_83322742的博客 1109

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【算法】递归:从分治法理解递归

文章将从分治法的基本思想展开,再通过该思想去理解递归的过程与原理,总结基本方法,最后通过举例说明来给读者演示解题过程。

qq_66725576的博客 805

分治法策略与递归算法以及递归算法的设计

有关分治法策略与递归算法以及递归算法的设计的介绍以及一些例题。

2401_83201682的博客 881
下一篇: 第二章、递归与分治策略
Senye_ing
博客等级 码龄8年 24粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Senye_ing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值