软考-软件设计师 - 第8章 算法设计与分析【附补充常考知识点】

本文详细介绍了算法设计与分析的基础概念,包括算法的5个特性、设计与分析方法。重点探讨了分治法、动态规划、贪心法和回溯法,分别阐述了它们的基本思想、典型应用和实例。同时,提到了时间复杂度、递归式和近似算法等关键概念,为理解和实现高效算法提供了全面的指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

8.1 算法设计与分析的基本概念

8.1.1 算法

5个重要特性:
(1)有穷性
(2)确定性
(3)可行性
(4)输入
(5)输出

8.1.2 算法设计

算法设计是困难的,也是灵活充满智慧的过程,需要根据实际情况具体问题具体分析。

8.1.3 算法分析

指的是对一个算法所需要的资源进行估算,包括内存、通信宽带、计算机硬件和和时间等,所需要的资源越多,算法复杂度越多。

8.1.4 算法的表示

(1)自然语言
(2)流程图
(3)程序设计语言
(4)伪代码

8.2 算法分析与基础

8.2.1 时间复杂度

(1)最佳情况
(2)最坏情况
(3)平均情况

8.2.2 渐进符号

在这里插入图片描述

8.2.3 递归式

(1)展开法
(2)代换法
(3)递归树法
(4)主方法

8.3 分治法 ❤❤❤

8.3.1 递归的概念

两个要素:
(1)边界条件:确定递归到何时终止
(2)递归模式:大问题如何分解为小问题,也称为递归体。

8.3.2 分治法的基本思想

(1)分解
(2)求解
(3)合并
把一个问题拆分成多个小规模的相同子问题,一般可用递归解决。

8.3.3 分治法的经典案例

斐波那契数列、归并排序、快速排序、矩阵乘法、二分搜索、大整数乘法、汉诺塔、最大子和段问题、快速排序(一分为二)

8.4 动态规划 ❤❤❤

8.4.1 动态规划的基本思想

将待求解问题分解成若干个子问题,求解子问题,然后从子问题的解得到原问题的解。
(1)最优子结构
(2)重叠子问题

特征:划分子问题,并把子问题结果使用数组存储,利用查询子问题结果构造最终问题结果。(一般自顶向下时间复杂度为 O(2n),自底向上时间复杂度为 O(n
a)效率更高

8.4.2 动态规划的典型案例

0-1背包,斐波那契数列、矩阵乘法、背包问题、 LCS、最长公共子序列、

8.5 贪心法 ❤❤❤

8.5.1 贪心法的基本思想

不求最优解,以当前情况为基础做最优选,不考虑真题,不回溯。

特征:局部最优,但整体不见得最优。每步有明确的,既定的策略。

8.5.2 贪心算法的典型实例

背包问题(如装箱)、多机调度、找零钱问题,邻分背包问题、霍夫曼编码

8.6 回溯法 ❤❤❤

8.6.1 回溯法的基本框架

系统的搜索解法,一条路走,能进则进,不能则退,换条路再试,一般用到递归和堆栈。

特征:系统的搜索一个问题的所有解或任一解。

8.6.1 回溯法的典型实例

N 皇后问题、迷宫、背包问题

8.7 分支限界法

类似于回溯法,以广度优先方式搜索解空间树。

8.8 概率算法

加上随机性

8.9 近似算法

放弃最优解,用近似最优解代替。

8.10 数据挖掘算法

利用机器学习方法对多种数据进行分析和挖掘。核心是算法,主要功能是分类、回归、关联规则和类聚等。

8.11 智能优化算法

(1)人工神经网络
(2)遗传算法
(3)模拟退火算法
(4)经济搜索算法
(5)蚁群算法
(6)粒子群优化算法

在这里插入图片描述
在这里插入图片描述

❤❤❤补充 各类排序算法对比:
在这里插入图片描述

区别:分批次进行区分,熟悉各类时间复杂度和稳定性。若待排序列的记录数目 n 较小,可采用直接插入排序和简单选择排序。由于直接插入排序所需的记录移动操作较简单选择排序多,因而当记录本身信息量大时,用简单选择排序方法较好。
若待排记录按关键字基本有序,宜采用直接插入排序或冒泡排序。
当 n 很大且关键字位数较少时,采用基数排序较好。
若 n 很大,则应采用时间复杂度为 O(nlog2n)的排序方法,例如快速排序、堆排序或归并排序:
(1)快速排序目前被认为是内部排序中最好的方法,当待排序的关键字为随机分布时,快速排序的平均运行时间最短;
(2)堆排序只需要一个辅助空间,并且不会出现在快速排序中可能出现的最快情况。
(3)快速排序和堆排序都是不稳定的排序方法,若要求排序稳定,可选择归并排序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

平芜尽处是春山-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值