高级算法设计与分析(二) -- 递归与分治策略

系列文章目录

高级算法设计与分析(一) -- 算法引论

高级算法设计与分析(二) -- 递归与分治策略

高级算法设计与分析(三) -- 动态规划

未完待续【

高级算法设计与分析(四) -- 贪心算法

高级算法设计与分析(五) -- 回溯法

高级算法设计与分析(六) -- 分支限界法

高级算法设计与分析(七) -- 概率算法

高级算法设计与分析(八) -- NP完全性理论

高级算法设计与分析(九) -- 总结


目录

系列文章目录

前言

一、递归的概念

1.1、eg:累加函数

1.2、eg:斐波那契数列

1.3、eg:阿克曼函数

1.4、eg:汉诺塔问题

二、分治法的基本思想

三、二分搜索技术

四、大整数的乘法

五、棋盘覆盖

六、合并排序

七、循环赛日程表

递归算法小结

八、***最大子段和

九、矩阵乘法

十、线性时间选择

习题

汉诺塔问题

二分搜索法

大整数的乘法

棋盘覆盖

​编辑

合并排序

循环赛日程表


前言

tips:鉴于本人写字如画符,就不出视频教程了,如实在有需要,请在文章下方留言。当然,文章有任何问题,也请留言,谢谢!

这个系列用另一种形式,把习题放在最下面,看看好用不。

本系列文章最后一文会进行简要全部总结,以及思维导图放在最后一篇文章最下面,请自行获取。


一、递归的概念

直接或间接地调用自身的算法称为递归算法。

1.1、eg:累加函数

时间:O(n);空间:O(n)
改成非递归。

1.2、eg:斐波那契数列

斐波那契数列直观理解:第1,2个数为1,之后每个数为前两个数之和

eg:1,1,2,3,5,8,13……

1.3、eg:阿克曼函数

阿克曼比较难理解:

直接给例子:

A(0,0)=1

A(0,1)=2

A(1,0)=A(0,1)=2

A(1,1)=A(0,A(1,0))=A(0,2)=3

……

1.4、eg:汉诺塔问题

问题描述:把圆盘从大到小摆到另一个柱子

要求:在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。

二、分治法的基本思想

一个规模为n的问题,分为规模均为n/b的a个子问题,f(n)表示其他部分的时间复杂性

三、二分搜索技术

原理简单理解:如下,想要找4的所在,先找数组下标中间位置,即(7+0)/2=3.5~3,可以先找到7,比较与目标大小,这里目标更小,在前一部分找,即数组下标0-2中,(2+0)/2=1,可以找到3,同理最后找到4.

四、大整数的乘法

1、一般情况下的乘法

计算机运行加法的运算,比运行乘法的运算快得多,所以时间复杂度一般只考虑乘法运算。

2、改进后的乘法

理解:XY为两个n位乘数,把X前n/2位记为A,后n/2位记为B,把Y前n/2位记为C,后n/2位记为D,(下式是对二进制乘数计算,对十进制乘数计算一个将2^(n/2)变为10^(n/2))

3、一般情况下的计算式

五、棋盘覆盖

1、问题描述:

在一个2^k*2^k棋盘中,有一个方格与其他不同(如下X处),用4中不同的L形骨牌(即朝向不同的占3个方格的骨牌,看图更好理解)去覆盖棋盘,要求骨牌全部占满棋盘,不多余,不留空,不重叠。

2、基本思想:

1、将2^k*2^k棋盘分割为4个2^(k-1)*2^(k-1)棋盘
2、特殊方格在其中一个区域中,将其他三个无特殊方格的区域用一个L形骨牌覆盖在汇合处。

ge:第一步将棋盘分割(红线),

第二步:X在左上方区域,即用一个L形骨牌覆盖其他三个无X区域(3个红色的1处为一个骨牌),使得其他三个区域也分别成为一个有特殊方格的区域,

开始递归:将右上方部分也分为4个棋盘,其中X在一个区域,其他区域用一个L形骨牌共同覆盖,

以此类推……

六、合并排序

七、循环赛日程表

1、问题描述:

设有n=2^k个运动员要进行循环赛。现要设计一个满足以下要求的比赛日程表:
(1)每个选手必须与其他n-1个选手各赛一次;
(2)每个选手一天只能参赛一次;
(3)循环赛在n-1天内结束

递归算法小结

八、***最大子段和

问题描述:

给定n个整数(可能为负整数)组成的序列(a,b,c,d,……), 寻找它的某个连续子段,使得其和最大。例如(1,12,-7,34,-3,-23,4,)最大子段是{1,12,-7,34 }其和为40。

1、穷举法

毫无技术含量!!!

2、分治法

分成两部分,3种情况
1、最大子段和在左边
2、最大子段和在右边
3、最大子段和跨过两个部分(从中间位置分别向左右两边求一个最大的数,然后相加)

九、矩阵乘法

合并的时间复杂度为n^2

改进:

算法分析:

十、线性时间选择


习题

汉诺塔问题

二分搜索法

10个:1,2,4,8,16,32,64,128,256,512

天平可以放两端7个:1,3,9,27,81,243,729;如秤2克的东西,可以1+2=3

大整数的乘法

棋盘覆盖

合并排序

循环赛日程表

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

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

相关文章

iEnglish:家校协同培养学生自主阅读习惯

近日,2023年最新一期365天和1000天“iEnglish学习成长营”顺利结营。据悉,截至今年12月,在家庭场景中完成365天和1000天不间断阅读人数分别突破15万人和2万人。 近年来,全民终身学习的学习型社会不断深入推进,基础教育中对于学生的综合阅读能力素养新要求不断更新。提升孩子的…

【Git】Git基本操作

文章目录 Git 是什么Git 的优点Git 安装Linux UbuntuLinux CentOsWindows Git 基本操作1. 创建 Git 本地仓库2. 配置 Git3. Git工作区、暂存区和版本库4. 添加文件5. 查看 .git 文件6. 修改文件7. 版本回退 Git 是什么 Git是一个免费的、开源的分布式版本控制系统,…

【Linux】ip命令使用

ip命令 用于管理与配置网络接口和路由表。 ip命令的安装 ip 命令来自 iproute2 软件包,在 CentOS 7 中默认已安装。 yum install -y iproute 语法 ip [ OPTIONS ] OBJECT { COMMAND | help }ip [ -force ] -batch filename选项及作用 执行令 : ip …

TCP的拥塞控制_基础知识_四种拥塞控制方法

TCP的拥塞控制 一.拥塞控制的基本概念 在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏,这种情况就叫作拥塞 。 计算机网络中的链路容量(带宽)、交换节点中的缓存和处理机等都是网络的资源 若出现拥塞…

spring boot 配置多数据源 踩坑 BindingException: Invalid bound statement (not found)

在上一篇:《【已解决】Spring Boot多数据源的时候,mybatis报错提示:Invalid bound statement (not found)》 凯哥(凯哥Java) 已经接受了,在Spring Boot配置多数据源时候,因为自己马虎,导致的一个坑。下面&a…

Notepad++:多行数据操作

1)删除关键字之后(或之前)的所有字符 删除s之后(包含s)的所有内容;快捷键:s.*$ 替换成功 删除s之前(包含s)的所有内容;快捷键:^.*s 2&#xff09…

深度学习中的张量维度

1 深度学习中的张量 在深度学习框架中,Tensor(张量)是一种数据结构,用于存储和操作多维数组。张量可以被视为一种扩展的矩阵,它可以具有任意数量的维度。 在深度学习中,张量通常被用来表示神经网络的输入…

PowerDesigner生成数据字典

这里写自定义目录标题 1,创建物理模型2,创建数据源连接3,获取表4,创建报告 先看下最终效果 1,创建物理模型 2,创建数据源连接 填写数据源连接信息 测试连接是否成功 3,获取表 连接刚创建的数…

Springboot数据校验与异常篇

一、异常处理 1.1Http状态码 HTTP状态码是指在HTTP通信过程中,服务器向客户端返回的响应状态。它通过3位数字构成,第一个数字定义了响应的类别,后两位数字没有具体分类作用。以下是常见的HTTP状态码及其含义: - 1xx(信…

[PyTorch][chapter 8][李宏毅深度学习][Back propagation]

前言: 反向传播算法(英:Backpropagation algorithm,简称:BP算法)是一种监督学习算法,常被用来训练多层感知机。 它用于计算梯度计算中,降低误差。 目录: 链式法则 模型简介(Model) 损失函…

【MATLAB第84期】基于MATLAB的波形叠加极限学习机SW-ELM代理模型的sobol全局敏感性分析法应用

【MATLAB第84期】基于MATLAB的波形叠加极限学习机SW-ELM代理模型的sobol全局敏感性分析法应用 前言 跟往期sobol区别: 1.sobol计算依赖于验证集样本,无需定义变量上下限。 2.SW-ELM自带激活函数,计算具有phi(x)e^x激…

第二证券:诱多诱空是指什么?股民该如何应对?

诱多诱空是指什么? 诱多诱空各指代主力的一类操盘行为。诱多是指主力有意营建股价上涨的假象,从而诱使不知情股民买入该股,主力趁机抛售股票离场,因为本身股价上涨靠主力一手织造,主力撤资后股价会回落,买…

Next.js 学习笔记(三)——路由

路由 路由基础知识 每个应用程序的骨架都是路由。本页将向你介绍互联网路由的基本概念以及如何在 Next.js 中处理路由。 术语 首先,你将在整个文档中看到这些术语的使用情况。以下是一个快速参考: 树(Tree):用于可…

云原生系列2-CICD持续集成部署-GitLab和Jenkins

1、CICD持续集成部署 传统软件开发流程: 1、项目经理分配模块开发任务给开发人员(项目经理-开发) 2、每个模块单独开发完毕(开发),单元测试(测试) 3、开发完毕后,集成部…

3A服务器 (hcia)

原理 认证:验证用户是否可以获得网络访问权。 授权:授权用户可以使用哪些服务。 计费:记录用户使用网络资源的情况 实验 步骤 1.配置ip地址 2.配置认证服务器 aaa authentication-scheme datacom(认证服务器名字&#xf…

2024 年 8 个顶级开源 LLM(大语言模型)

如果没有所谓的大型语言模型(LLM),当前的生成式人工智能革命就不可能实现。LLM 基于 transformers(一种强大的神经架构)是用于建模和处理人类语言的 AI 系统。它们之所以被称为“大”,是因为它们有数亿甚至…

iPhone手机开启地震预警功能

iPhone手机开启地震预警功能 地震预警告警开启方式 地震预警 版权:成都高新减灾研究所 告警开启方式

CSS浮动

前置传统网页布局的三种方式: 标准流(普通流/文档流): 浮动流: 定位流: 浮动: 实现元素在一行中向哪个方向排列 浮动后的元素还是可以设置边距的。 float默认是不会继承,但是可以强制设置flo…

使用Matlab实现声音信号处理

利用Matlab软件对声音信号进行读取、放音、存储 先去下载一个声音文件;使用这个代码即可 clear; clc; [y, Fs] audioread(xxx.wav); plot(y); y y(:, 1); spectrogram(y); sound(y, Fs); % player audioplayer(y, Fs);y1 diff(y(:, 1)); subplot(2, 1, 1); pl…

美国第二大互联网供应商泄露3600万用户数据

12月18日,美国第二大互联网服务供应商Xfinity 透露,10月份发生的一起网络攻击泄露了多达3600万用户的敏感数据。 Xfinity由康卡斯特公司所属,为美国用户提供宽带互联网和有线电视等服务。 该公司表示,攻击是受Citrix Bleed的 CVE…