算法入门 | 分治策略

news2024/11/26 22:32:26

目录

分治策略

1.分治法可以解决的问题特征

2.分治法解题步骤

3.分治法编程举例

递归求阶乘

求斐波那契数列

小练习:给出一个数n,打印其每一位


分治策略

1.分治法可以解决的问题特征

(1)问题规模缩小到一定程度就可以轻易解决

(2)问题可以分解为若干个规模较小的相同类型问题

(3)使用小规模的解可以合并成该问题原规模的解

(4)该问题分解出的各个子问题相互独立

2.分治法解题步骤

(1)分解:将原问题划分为与原问题形式相同的子问题,只是规模减小。

(2)解决:递归求解子问题,如果子问题规模足够小则停止递归,直接求解。

(3)合并:将小规模的解合并为原规模问题的解。

3.分治法编程举例

递归求阶乘

(1)思想:不断缩小问题规模(要求n的阶乘,先求n-1的阶乘;要求n-1的阶乘,先求n-2的阶乘......)直至规模为1~求1的阶乘,再逐层返回合并解。

递归定义式如图: 

(2)代码实现(循环实现):

int fac(int n)
{
	if (n <= 1) return 1;
	int sum = 1;
	for (int i = 2; i <= n; ++i)
	{
		sum *= i;
	}
	return sum;
}
int main()
{
	int n = 0;
	cin >> n;
	cout << fac(n) << endl;
	return 0;
}

 时间复杂度:O(n)       空间复杂度:S(1)

(3)代码实现(递归实现):

int fac(int n)
{
	if (n <= 1) return 1;
	return n * fac(n - 1);
}
int main()
{
	int n = 0;
	cin >> n;
	cout << fac(n) << endl;
	return 0;
}

时间复杂度:O(n)       空间复杂度:S(n)

由于递归会开辟栈帧,故有额外空间开辟:空间复杂度S(n)

(4)补充:没有无限递归!!栈的空间是有限的,栈满会溢出。

求斐波那契数列

(1)思想:斐波那契数列(1 1 2 3 5 8 12 21.....),递归求解。当n>2时,fib(n)=fib(n-1)+fib(n-2);

递归定义式如图: 

(2)代码实现(循环实现):

int fib(int n)
{
	int a = 1, b = 1, c = 1;//c初值为1,避免写n==1||n=2时return 1
	//if(n==1||n==2) return 1;
	for (int i = 3; i <= n; ++i)
	{
		c = a + b;
		a = b;
		b = c;
	}
	return c;
}
int main()
{
	int n = 0;
	cin >> n;
	cout << fib(n) << endl;
	return 0;
}

(3)代码实现(递归实现):

int fib(int n)
{
	if (n == 1 || n == 2) return 1;
	return fib(n - 1) + fib(n - 2);
}
int main()
{
	int n = 0;
	cin >> n;
	cout << fib(n) << endl;
	return 0;
}

时间复杂度:O(n)       空间复杂度:S(n)

小练习:给出一个数n,打印其每一位

(1)代码实现(循环实现):

void PrintInt(int n)
{
	if (n < 0) return;
	while (n != 0)
	{
		printf("%d ", n % 10);
		n /= 10;
	}
}
int main()
{
	int n = 0;
	cin >> n;
	PrintInt(n);
	return 0;
}

(2)代码实现(递归实现):

void PrintInt(int n)
{
	if (n <= 0) return;
	printf("%d ", n % 10);
	PrintInt(n / 10);
}
int main()
{
	int n = 0;
	cin >> n;
	PrintInt(n);
	return 0;
}

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

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

相关文章

什么是HTML?

关于每篇博文的浪漫主义 【4k】镰仓的灰色与青 | irkyar | sonya74【【4k】镰仓的灰色与青 | irkyar | sonya74】 https://www.bilibili.com/video/BV14G411A7eX/?share_sourcecopy_web&vd_source385ba0043075be7c24c4aeb4aaa73352 网页 1.1什么是网页 网站是指在因特网…

重磅干货:多维度深入总结MySQL锁机制

一. 前言 有过面试经历的小伙伴都知道&#xff0c;现在面试Java开发工作&#xff0c;数据库几乎是你绕不过去的一道坎。就以文哥班上的学员为例&#xff0c;几乎每个学员的每场面试都会被问到数据库的问题。文哥很用心地给大家总结了一下&#xff0c;数据库基本都是从以下几个…

基于变化点 copula 优化算法中的贝叶斯研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑…

基础IO(下)——Linux

文章目录1. 理解文件系统1.2 背景知识1.2 inode vs 文件名1.3 软硬链接2. 动态库和静态库2.1 静态库.a2.1.1 如果想写一个库&#xff1f;&#xff08;编写库的人的角度&#xff09;2.1.2如果我把库给别人&#xff0c;别人怎么用呢&#xff1f;&#xff08;使用库的人的角度&…

Nature子刊:用于阿尔茨海默病痴呆评估的多模态深度学习模型

在全球范围内&#xff0c;每年有近1000万新发痴呆病例&#xff0c;其中阿尔茨海默病&#xff08;AD&#xff09;最为常见。需要新的措施来改善对各种病因导致认知障碍的个体的诊断。作者报告了一个深度学习框架&#xff0c;该框架以连续方式完成多个诊断步骤&#xff0c;以识别…

随机森林可视化

今天看到别人的文章&#xff0c;说到了随机森林可视化&#xff0c;于是尝试了下。 window安装 windows版本安装: 1.在下面去下载window的exe安装包&#xff0c;安装graphviz。 http://www.graphviz.org/download/ 在路径选项&#xff0c;点击add path to computer&#xff0c…

IDEA类和方法注释模板配置

1、类的注释模板配置 File-->Settings-->Editor-->File and Code Templates-->File --->Class: 模板代码下所示&#xff1a; /*** ClassName: ${NAME}* Author : ${USER}* Date :${DATE} ${TIME}* Description: TODO* Version :1.0*/ 上述${NAME}为类名&…

QT Android环境搭建 及 解决“Platfrom tools installed”等系列配置问题( 附QT、JDK、SDK、NDK网盘链接 )

文章目录一、安装Android相关插件二、添加JDK、SDK、NDK路径三、搭建环境过程常见问题1. “Platfrom tools installed”失败2. 以上操作全部完成且无报错现象&#xff0c;Android编译就是报错3. “SDK manger is not available with the current version of SDK tools. Use nat…

计算机网络概述

既然我们无法逃避接触互联网&#xff0c;那么为何不去了解它并且使用它。 ——因特网“之父” 温顿.瑟夫 因特网概述 1、网络、互联网与因特网的区别与关系 多节点之间通过有线链路连接起来的有线链路简单网络 节点间也可以通过无线链路连接实现无线链路简单网络 网络与网络之…

基于51单片机有害气体浓度检测超限报警Proteus仿真

资料编号&#xff1a;157 下面是相关功能视频演示&#xff1a; 157-基于51单片机有害气体浓度检测超限报警Proteus仿真(源码仿真全套资料)功能介绍&#xff1a; 采用51单片机作为CPU&#xff0c;ADC0832作为AD转换模块&#xff0c;LCD1602显示当前采集的有害气体数值&#xf…

【爬虫系列】Python 爬虫入门(1)

爬虫说明 我们知道&#xff0c;互联网时代&#xff0c;大量的数据信息会以网页作为载体而存在&#xff0c;有些公开而免费的数据比较适合采集&#xff0c;并经过有效处理之后&#xff0c;可用于数据分析、机器学习、科学决策等方面&#xff0c;而从网页中采集数据的利器&#…

<学习笔记>从零开始自学Python-之-web应用框架Django( 八)Django表单

HTML 表单是交互式网站的基本组成部分&#xff0c;用户提交信息、搜索内容、与后台数据交互都要用到表单。 1、从请求对象中获取数据 view视图函数的第一个参数都是 request,这个request就是请求获得的HttpRequest对象。里面包含中有一些关于当前所请求 URL 的信息&#xff0c…

MySQL中SQL命令语句条件查询

一、聚合函数 聚合函数&#xff1a;又叫组函数&#xff0c;用来对表中的数据进行统计和计算&#xff0c;结合group by分组使用&#xff0c;用于统计和计算分组数据 常用聚合函数 count(col)&#xff1a;求指定列的总行数max(col)&#xff1a;求指定列的最大值min(col)&#…

SnowNLP使用自定义语料进行模型训练(情感分析)

SnowNLP SnowNLP是一个功能强大的中文文本处理库&#xff0c;它囊括了中文分词、词性标注、情感分析、文本分类、关键字/摘要提取、TF/IDF、文本相似度等诸多功能&#xff0c;像隐马尔科夫模型、朴素贝叶斯、TextRank等算法均在这个库中有对应的应用。如果大家仔细观察过博主的…

nodejs的下载安装

1.从官网下载nodejs 官网地址如下 Download | Node.js 选择老版本的node防止出现兼容问题 根据电脑下载64位或者32位的 2.安装node 配置环境变量&#xff0c;nodejs安装完成后&#xff0c;会默认在系统path环境变量中配置node.exe的路径&#xff0c;打开cmd&#xff0c;输入n…

Java实现DFA算法进行敏感词过滤

一、敏感词过滤数据文件 https://github.com/jkiss/sensitive-words 代码图数据文件如下&#xff1a; 二、敏感词实现原理基于二叉树排序 首先&#xff1a;query 日 ---> {本}、query 本 --->{人、鬼子}、query 人 --->{null}、query 鬼 ---> {子}。形如下结构&…

见微知著,从两道有意思的 CSS 面试题,考察你的基础

今天在论坛&#xff0c;有看到这样一道非常有意思的题目&#xff0c;简单的代码如下&#xff1a; <div><p id"a">First Paragraph</p> </div> 样式如下&#xff1a; p#a {color: green; } div::first-line {color: blue; } 试问&#xff0…

手写笔记教会你集成Spring和Mybatis框架(有详细注解)

目录 1. 为什么要将框架进行集成呢&#xff1f; 2. 框架的集成有什么好处&#xff1f; 3. Spring框架与Mybatis框架的集成 3.1 步骤一&#xff1a; 3.2 步骤二 3.3 Spring的配置文件&#xff1a; 3.4 Mybatis的配置文件&#xff1a; 4. 总结 1. 为什么要将框架进行集成…

基于51单片机智能恒温箱控制系统Proteus仿真

资料编号&#xff1a;153 下面是相关功能视频演示&#xff1a; 153-基于51单片机智能恒温箱控制系统Proteus仿真(源码仿真全套资料)功能介绍&#xff1a; 采用51单片机作为控制CPU&#xff0c;ds18b20作为温度传感器采集温度&#xff0c;LCD1602显示当前温度&#xff0c;采用…

【Yarn】spark/flink 作业的executor内存参数和Yarn web ui 显示不一致问题

前言 最近在做 CDH -> CDP 的迁移&#xff0c;Yarn迁移完成后&#xff0c;发现在spark/flink 作业的executor内存参数和Yarn web ui 显示申请的内存不一致。 例如&#xff1a;一个 spark 任务申请了 10个 executor&#xff0c;每个executor 内存为 1G&#xff0c;driver内…