| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 算法设计和分析 ② 分治和递归 -> 正文阅读 |
|
[数据结构与算法]算法设计和分析 ② 分治和递归 |
第二章 分治和递归2.1 递归2.1.1 递归的定义? ? ? ? ① 程序调用自身的编程技巧称为递归。 ? ? ? ? ② 递归的基本思路:将一个大型问题转化为一些与原问题相似的规模较小的问题来求解。 ? ? ? ? ③ 如果函数调用他本身,那么他就是递归的。 2.1.2 递归的应用场景? ? ? ? ① 问题的定义是递归的:例如斐波拉契数列。 ? ? ? ? ② 解决问题采用的数据结构是递归定义的:例如二叉树的遍历 ? ? ? ? ③ 问题的求解过程是递归的:例如汉诺塔问题 2.1.3 递归式? ? ? ? 递归式是用于描述递归函数的数学公式,斐波拉契数列便是一个典型的例子,举例如下: ???????? ????????其满足: ????????① 第一式给出了函数的初始值,称为边界条件 ? ? ? ? ② 第二式用较小的自变量函数值来描述大自变量的函数值,称为递归方程 ? ? ? ? ③ 递归方程和边界条件是递归的两个基本要素 2.1.4 斐波拉契数列的简单实现? ? ? ? ① 程序实现如下:
??????② 以n = 4,即fib(4)程序运行如下: ? 2.1.5 递归的使用条件? ? ? ? ① 原始问题可以分解成相似的子问题 ? ? ? ? ② 子问题的规模小于原始问题 ? ? ? ? ③ 递归函数必须有某些类型的终止条件 2.1.6 递归的优缺点????????
2.2 分治2.2.1 分治的设计思想分治法的设计思想,即是将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。 ? ????????分治模式在每一层递归上的步骤。 ? ? ? ? ① 分解(Divide): 将一个难以直接解决的大问题,分割成一些规模较小的子问题,这些子问题相互独立,且与原问题相同。 ? ? ? ? ②求解(Conquer):递归求解子问题,若问题足够小则直接求解。 ? ? ? ? ③合并(Combine):将各个子问题的解合并得到原问题的解。 2.2.2 二分搜索法的简单实现????????
? ? ? ? ?① 数组a[ i ]为排序好的升序数组,如果传入数组为乱序,则不可使用此方法。 2.2.3 分治法的适用条件? ? ? ? ① 问题缩小到一定程度可以容易的解决 ? ? ? ? ② 问题可以分解成若干规模较小的相同问题 ? ? ? ? ③ 利用子问题的解可以合并得到原始问题的解 ? ? ? ? ④ 问题所分解出的各个子问题是相互独立的,子问题不包含公共子问题 2.2.4 递归复杂度判定定理参考博客1:重谈主定理(master定理)及其证明 - Jayun - 博客园 参考博客2:【Master Theorem主定理】递归时间复杂度分析_白马金羁侠少年的博客-CSDN博客 ?其可简化为: ???????? 其中,n为问题规模,a为递推的子问题数量,n/b为每个子问题规模,O( n^d )为递推以外进行的计算工作量。 对于其时间复杂度T(n)的有: ?举例如下: ?此时 a = 3, b = 2, d = 1, 即有 a = 3 > b^d = 2, 时间复杂度T(n) = O(n^log3) = O(n^1.59) ?此时a = 8, b = 2, d = 2,即有 a = 8 > b^d = 4, 时间复杂度T(n) = O(n^log8) = O(n^3) 需要注意的是在时间复杂度计算中,一般以2为底的对数简写为log。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 8:48:50- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |