IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 算法设计与分析复习 -> 正文阅读

[数据结构与算法]算法设计与分析复习

算法设计与分析复习

1.绪论

1.1算法特征及性质

特征含义
输入(input)一个算法可以有零个或多个输入。
输出(output)一个算法应有一个或多个输出,作为算法进行信息加工的结果。
确定性(definiteness)确定性指算法中的每一个步骤都必须是有明确定义的。
可行性(effectiveness)算法中所有的操作都必须足够基本,使算法的执行者或阅读者明确其含义以及如何执行。
有穷性(finiteness)算法的有穷性是指算法必须总能在执行有限步骤之后终止。
满足目标/评价算法基本原则
正确性
可使用性
可读性
健壮性
高效率与低存储量需求

1.2时间复杂度分析

算法的复杂度主要包括时间复杂度和空间复杂度.

算法的时间复杂度指算法运行所需时间,也指执行算法所需要的计算工作量。

算法复杂性在渐近意义下的记号有:O、Ω、?等,分别表达运行时间的上界、运行时间的下界、运行时间的准确界等.

O上界

设函数f(n)和g(n)是定义在非负整数集合上的正函数,如果存在正整数n0和正常数c,使得当n≥n0时,有f(n)≤cg(n),就称f(n)的阶至多是O(g(n)),记做f(n) = O(g(n)),称为大O记号

image-20220504221141729

image-20220504173848870

image-20220504173905721

?下界

设有函数f(n)和g(n)是定义在非负整数集合上的正函数,如果存在正整数n0和正常数c,使得当n≥n0时,有f(n)≥cg(n),就称f(n)的阶至少是?(g(n)),记做f(n) = ?(g(n)),称为?记号

image-20220504221222240

image-20220504173920701

Θ准确界

设有函数f(n)和g(n)是定义在非负整数集合上的正函数,如果存在正整数n0和正常数c1和c2(c1 ≤c2),使得当n≥n0时,
有c1 g(n)≤f(n)≤c2 g(n) ,就称f(n)的阶是Θ(g(n)),则记做f(n)=Θ(g(n)),称为Θ记号

image-20220504221252051

image-20220504173950335

1.3各个算法的时间复杂度

image-20220504220212233

排序法平均时间最差情形稳定度额外空间备注
冒泡O(n2)O(n2)稳定O(1)n小时较好
选择O(n2)O(n2)不稳定O(1)n小时较好
插入O(n2)O(n2)稳定O(1)大部分已排序时较好
基数O(logRB)O(logRB)稳定O(n)B是真数(0-9),R是基数(个十百)
ShellO(nlogn)O(ns) 1<s<2不稳定O(1)s是所选分组
快速O(nlogn)O(n2)不稳定O(nlogn)n大时较好
归并O(nlogn)O(nlogn)稳定O(1)n大时较好
O(nlogn)O(nlogn)不稳定O(1)n大时较好

时间复杂度分类

image-20220504174116963

2.递归

2.1递归方程的求解方法

设序列a0, a1, …, an, …, 简记为{an}, 一个把an与某些个ai(i<n)
联系起来的等式叫做关于序列 {an} 的递推方程

四种方法介绍

(1)迭代法:不断用递推方程的右部替换左部,有时候直接迭代可能不太方便,可以使用换元迭代。例如二分归并排序迭代方程的求解过程。

(2)差消法:差消法一般应用在递归方程右边不仅仅只依赖于当前项的前一项,而是前很多项,这种递归方程直接用迭代法很麻烦。属于高阶递归方程,因此要先把高阶递归方程进行差消,再进行迭代。例如快速排序的递归方程求解过程。

(3)递归树:建立递归树,每次迭代将函数项作为儿子,非函数项作为根的值。

(4)主定理法:

? 迭代法

? 直接迭代:插入排序最坏情况下时间分析

? 换元迭代:二分归并排序最坏情况下时间分析

? 差消迭代:快速排序平均情况下的时间分析

? 迭代模型:递归树

? 尝试法:快速排序平均情况下的时间分析

? 主定理:递归算法的分析

一、迭代法

image-20220504174545183

image-20220505094042660

image-20220505094105811

image-20220504180653817

image-20220504180706384

二、迭代树

树根:递归方程右侧除了函数外的剩余表达式

树叶:方程右侧的一个递归的函数项

最后所有结点的全之和就是W(n)

image-20220504180951286

image-20220504181006455

image-20220505094234715

三、主定理

image-20220504181040068

image-20220504181050676

image-20220504181106689

image-20220504181216502

image-20220505094341105

四、线性齐次方程求解

3.各类算法的基本思想和解题步骤

快速排序

快速排序的基本思想:

快速排序使用分治的思想,通过一趟排序将待排序列分割成两部分,其中一部分记录的关键字均比另一部分记录的关键字小。之后分别对这两部分记录继续进行排序,以达到整个序列有序的目的。

快速排序的三个步骤:

(1)选择基准:在待排序列中,按照某种方式挑出一个元素,作为 “基准”(pivot)

(2)分割操作:以该基准在序列中的实际位置,把序列分成两个子序列。此时,在基准左边的元素都比该基准小,在基准右边的元素都比基准大

(3)递归地对两个序列进行快速排序,直到序列为空或者只有一个元素。

一、分治法

基本思想:

分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。即一种分目标完成程序算法,简单问题可用二分法完成

解题步骤:
  1. 分解成若干个子问题
  2. 求解子问题
  3. 合并子问题

二、蛮力法

三、回溯法

基本思想:

确定了解空间的组织结构后,回溯法从根节点出发,以深度优先搜索方式搜索整个解空间。回溯法以这种工作方式递归地在解空间中搜索,直到找到所要求的解或解空间所有解都被遍历过为止。

回溯法又称试探法。回溯法的基本做法是深度优先搜索,是一种组织得井井有条的、能避免不必要重复搜索的穷举式搜索算法。回溯算法的基本思想是:从一条路往前走,能进则进,不能进则退回来,换一条路再试。

解题步骤:

(1)针对所给问题,定义问题的解空间;
(2)确定易于搜索的解空间结构;
(3)以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索。

四、贪心法

基本思想:

对问题求解时总是做出在当前看来是最好的选择,即不从整体最优上加以考虑,只做某种意义上的局部最优解

希望通过局部最优决策导致问题的全局最优解

贪心法的当前选择可能要依赖已经做出的所有选择,但不依赖于有待于做出的选择和子问题。因此贪心法自顶向下,一步一步地做出贪心选择。

求解步骤:
  1. 建立数学模型来描述问题
  2. 把求解的问题分成若干个子问题
  3. 对每一个子问题求解,得到子问题的局部最优解
  4. 把子问题的局部最优解合成原来解问题的一个解

五、动态规划

基本思想:

把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系逐个击破

image-20220505102540737

解题步骤:
  1. 找出最优解的性质,并刻划其结构特征。
  2. 递归地定义最优值。
  3. 以自底向上的方式计算出最优值。
  4. 根据计算最优值时得到的信息,构造最优解
三个性质:

1.最优性原理:如果问题的最优解所包含的子问题的解也是最优的,就称该问题具有最优子结构,即满足最优性原理。

2.无后效性:即某阶段状态一旦确定,就不受这个状态以后决策的影响。也就是说,某状态以后的过程不会影响以前的状态,只与当前状态有关。

9)]

解题步骤:
  1. 找出最优解的性质,并刻划其结构特征。
  2. 递归地定义最优值。
  3. 以自底向上的方式计算出最优值。
  4. 根据计算最优值时得到的信息,构造最优解
三个性质:

1.最优性原理:如果问题的最优解所包含的子问题的解也是最优的,就称该问题具有最优子结构,即满足最优性原理。

2.无后效性:即某阶段状态一旦确定,就不受这个状态以后决策的影响。也就是说,某状态以后的过程不会影响以前的状态,只与当前状态有关。

3.有重叠子问题:即子问题之间是不独立的,一个子问题在下一阶段决策中可能被多次使用到。(该性质并不是动态规划适用的必要条件,但是如果没有这条性质,动态规划算法同其他算法相比就不具备优势)。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-05-08 08:20:57  更:2022-05-08 08:24:51 
 
开发: 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 3:55:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码