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

系列文章目录

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

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

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

未完待续【

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

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

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

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

高级算法设计与分析(八) -- 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

大整数的乘法

棋盘覆盖

合并排序

循环赛日程表

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

谷歌新款 Pixel 8 更小、更智能!

一、谷歌 Pixel 8 更小、更智能——比去年的 Pixel 7 贵了 100 美元——不是一点点——贵 与 Pixel 7 一样,Pixel同样在今天 8 比正式发布的更大的 Pixel 8 Pro 兄弟产品更小、更便宜。但今年价格有所上涨,128GB 存储型号的 Pixel 8 起售价为 699.99 美…

腾讯云消息队列11月产品月报 | RocketMQ 5.x 国际站上线

2023年 11月动态 消息队列 RocketMQ 版 1、5.x 形态国际站上线 国际站上线 5.x 集群全系列,第一批先开放新加坡和硅谷地域。 控制台链接:https://console.tencentcloud.com/trocketmq 2、 无感迁移能力 支持用户白屏化操作,将自建的 Roc…

夜莺项目发布 v6.5.0 版本,暗黑菜单来了

大家好,夜莺项目发布 v6.5.0 版本,启用新 logo,菜单支持换肤,支持了暗黑版本的菜单,下一步会支持全站暗黑主题,敬请期待,下面是新 logo。 暗黑菜单 页面右上角点击用户名,在下拉框里…

盘点ASO优化过去到现在的进步

ASO优化行业十年老兵报道!从以下几个方面总结了ASO优化的一些变化和进步,给大家分享。 一、优化手段: 过去,ASO优化主要依赖于机刷,通过破解苹果的算法,对苹果账号进行一系列的定向操作行为(搜…

React Jsx转换成真实DOM过程?

面试官:说说React Jsx转换成真实DOM过程? 一、是什么 react通过将组件编写的JSX映射到屏幕,以及组件中的状态发生了变化之后 React会将这些「变化」更新到屏幕上 在前面文章了解中,JSX通过babel最终转化成React.createElement这…

双碳背景下能耗在线监测系统硬件选型详述

Acrel-5000web建筑能耗分析系统是用户端能源管理分析系统,在电能管理系统的基础上增加了对水、气、煤、油、热(冷)量等集中采集与分析,通过对用户端所有能耗进行细分和统计,以直观的数据和图表向管理人员或决策层展示各类能源的使用消耗情况&…

SpringBoot访问外部接口的常见方式

文章目录 SpringBoot访问外部接口模拟服务接口RestTemplatepom.xmlRestTemplateConfigClientTestRestTemplateController.java结果 WebClientpom.xmlClientTestWebClientController.java结果 HttpClientpom.xmlClientTestHttpClientController.java结果 OkHttppom.xmlClientTes…

《数据结构、算法与应用C++语言描述》- 最小赢者树模板的C++实现

赢者树 完整可编译运行代码见:Github::Data-Structures-Algorithms-and-Applications/_30winnerTree 比赛规则 假定有 n 个选手参加一次网球比赛。比赛规则是“突然死亡法”(sudden-death mode):一名选手只要输掉一场球,就被淘汰。一对一对…

【Linux 驱动】Linux设备树(四)—— 设备树驱动LED

有了设备树以后,我们可以将寄存器信息保存到设备树,即便是更换了一个设备,我们也无需修改驱动文件,只需要修改设备树文件并重新编译。 下面介绍两种通过设备树驱动 LED 的最简单的方式,这两种方式的主要是设备树中 re…

自营商城与多商户入驻商城功能与开发流程_OctShop

如今互联网以及电子商务的大趋势下,很多企业或商家都意识到自营商城的重要性。当然,要搭建一个属于自己的自营商城并非简单。需要综合考虑众多的因素,如:用户体验、商品管理、在线支付、功能需求、市场分析等等多个方面。如果是自…

dell服务器 R740xd安装windows server 2019过程记录

公司有两台dell服务器型号是R740xd,增加了存储,更新系统到windows server 2019标准版。 查找了网上的系统安装方式,都没有实践成功,做一下工作记录,给大家做参考。 网络搜索到的两种方式,进行安装 &#x…

全都没有问题(二点五)

java 接口默认方法冲突等问题 基础基础基础 子接口覆盖父接口的默认方法 package com.book;interface AA{public abstract void print();public default void ID(){System.out.println("AA");} } interface BB extends AA{ //接口BB继承AAOverridepublic default…

C#线程的定义和使用方法

引言 在C#编程语言中,线程是一种并发执行的机制,允许程序同时执行多个任务。线程的使用使得我们能够利用计算机的多核处理器,实现程序的并行执行,提高系统的性能和响应能力。本文将详细介绍C#中线程的定义和使用方法,涵…

学习体系结构 - AArch64 虚拟化

学习体系结构 - AArch64 虚拟化 Learn the architecture - AArch64 virtualization Version 1.0 借助 Deepl 翻译文档 个人对文档补充的一部分解释, 仅供学习参考 前 3 章为了解内容,引入虚拟化 第 4-7 章为虚拟化比较核心的内容 第 4 章为第二阶段地址…

windows安装、基本使用vim

标题:windows安装、基本使用vim 1.下载并安装GVIM 百度网盘链接 提取码:2apr 进入安装界面,如下,勾选 其它都是默认即可 参考; 2.在powershell中使用vim 参考blog:window10安装vim编辑器 安装好后&…

机器人制作开源方案 | “校园卫士”-智能巡检机器人

作者:程训聪、柳贺凯、赵坤峰、叶智超、高仁伟 单位:黑龙江科技大学 指导老师:邵文冕、李杨 1. 摘要 针对校园巡检需求设计机器人本体结构,借助Arduino作为控制核心的巡检机器人控制系统构建方法研究了巡检机器人在校园环境下的…

数据结构:图解手撕B-树以及B树的优化和索引

文章目录 为什么需要引入B-树?B树是什么?B树的插入分析B树和B*树B树B*树分裂原理 B树的应用 本篇总结的内容是B-树 为什么需要引入B-树? 回忆一下前面的搜索结构,有哈希,红黑树,二分…等很多的搜索结构&a…

Maven仓库上传jar和mvn命令汇总

目录 导入远程仓库 命令结构 命令解释 项目pom 输入执行 本地仓库导入 命令格式 命令解释 Maven命令汇总 mvn 参数 mvn常用命令 web项目相关命令 导入远程仓库 命令结构 mvn deploy:deploy-file -Dfilejar包完整名称 -DgroupIdpom文件中引用的groupId名 -Dartifa…

使用 Node.js 删除文件 - 完整步骤教程

引言 在 Node.js 中处理文件尤其是移除文件,对于维护高效应用程序至关重要。储存和秩序当道的今天,删除不必要或冗余的文件能力显得尤为关键。本文深入探讨你会想要使用这个强大功能的时刻和原因,并通过各种案例展示了这个概念,同…

JavaScript基础(数组+正则表达+字符串)

目录 1.数组 1.1创建数组 1.2字面量创建数组 1.3length函数 1.4遍历数组1 1.5遍历数组2语法糖 1.6增删改查 1push 2pop 3unshift("x",x) 4shift() 5数组的截取 slice() splice() 6concat 7reverse 2.内置对象 2.1data 2.2Math对象 2.3字符串 1c…