type
status
date
slug
summary
tags
category
icon
password
填空题
算法概述
算法的定义
(1)算法的定义
算法是对特定问题求解步骤的一种描述,是指令的有限序列。
- 不是问题的答案,而是解决问题的操作步骤
- 算法就是一组有穷的规则,它们规定了解决某一特定类型问题的一系列运算。
(2)算法与程序的区别
- 程序与某种语言有关,能直接在机器上运行。
- 算法与特定的语言无关,可以用任何语言实现,甚至可以用自然语言实现。
- 算法与程序的区别是算法应具备有穷性;实际应用中,常用数学分析和后验分析相结合的方式来分析算法的性能。
(3)算法的五个重要特性
- 有穷性
- 确定性
- 可行性
- 输入
- 输出
(4)常用的描述算法的方法
- 自然语言
- 程序流程图
- 程序设计语言
- 伪代码:是介于自然语言和程序设计语言之间的方法,采用某一程序设计语言的基本语法,操作指令可以结合自然语言来设计。
(5)重要的问题类型
- 查找
- 排序
- 图
- 组合
- 集合
(6)如何评价算法
- 正确性
- 健壮性
- 可读性
- 可扩展性
算法的复杂性
(1)3个基本的计算模型
- 在进行问题的计算复杂性分析之前,首先必须建立求解问题所用的计算模型。3个基本计算模型是随机存储机(RAM)模型、随机存取存储程序机(RASP)模型和图灵机(TM)模型。
(2)算法的复杂性
- 算法的复杂性是算法运行所需要的计算机资源的量的度量,是评价算法优劣的重要依据。
- 计算机的资源最重要的是时间和空间资源,因而算法的复杂性有时间复杂性和空间复杂性之分。
- 衡量一个算法好坏的标准是时间复杂度低。
(3)算法问题的分类
- 通常将能用多项式时间求解的问题称为易解问题,将需要指数时间求解的问题称为难解问题。
- 能在多项式时间内运行确定性算法求解判定问题称为P类问题;能在多项式时间内运行非确定性算法求解的判定问题称为NP类问题。
- 如果一个问题是 NP 问题,并且所有的 NP 问题都可以在多项式时间内归约到它,则该问题属于 NPC 问题。
(4)度量算法效率的方法
- 计数法
- 计时法
具体算法
蛮力法
(1)定义
也称穷举法或枚举法,是一种简单直接地解决问题的方法。采用一定的策略依次处理待求解问题的所有元素,从而找出问题的解。
(2)算法步骤
- 枚举范围:确定穷举的范围
- 约束条件:保证处理过的元素不再被处理
(3)时间复杂度
对于一个具有n个元素的集合,蛮力法生成子集算法的时间复杂度为

分治法与减治法
(1)分治法的三个阶段
- 划分原始问题——启发式规则
- 独立子问题
- 平衡子问题
- 求解子问题
- 合并
(2)分治法的算法实现:递归
- 递归函数
- 递归调用
- 递归的2个基本要素
(3)分治法与减治法
- 分治法:归并排序
- 减治法:堆排序
(4)分治法
- 讲一个规模为n的问题分解为k个规模较小的子问题,这些子问题相互独立且与原问题相同,对着k个子问题分别求解,将求出的小规模分体的解合并为一个更大规模的问题的解,自底向上逐步求出原问题的解。
(5)减治法
- 把一个大问题划分为若干个子问题,但是只需要求解其中的一个子问题,也无需对子问题的解进行合并。
- 原问题的解与子问题的解之间存在某种确定的关系。
- 原问题的解只存在与其中一个较小规模的子问题中。
- 原问题的解与其中一个较小规模的解之间存在某种确定的对应关系。
动态规划与贪心法
- 最优化问题
在求解最优化问题中,满足约束条件的解称为问题的可行解,在这些解中使目标函数取得极值(极大或极小)的解称为最优解。
- 最优性原理
每个阶段的决策都是相对于初始决策所产生的当前状态,所有阶段的最优决策构成一个最优决策序列。
- 最优子结构性质
问题的最优解包含着其子问题的最优解。
动态规划法与贪心法
- 动态规划法用于求解多阶段决策最优化问题。
(1)用动态规划算法解决的问题一般应具备的性质是——满足最优性原理
- 最优子结构性质——某一问题可用动态规划算法求解的显著特征。
- 重叠子问题性质
(2)用贪心算法解决的问题一般应具备的性质是
- 最优子结构性质:一个问题的最优解包含其子问题的最优解,也称此问题满足最优性原理。
- 贪心选择性质:问题的整体最优解可以通过一系列局部最优解的选择,即贪心选择来得到。
(3)动态规划中填表的作用是:以空间换时间
(4)动态规划的求解过程
- 划分子问题:将原问题的求解过程划分为若干个阶段,每个阶段对应一个子问题,并且子问题之间具有重叠关系。
- 动态规划函数:根据子问题之间的重叠关系找到子问题满足的递推关系式,这是动态规划法的关键。
- 填写表格:根据动态规划函数设计表格,以自底向上的方式计算各个子问题的最优值并填表,实现动态规划过程。
(5)贪心法
- 把一个复杂问题分解为一系列较为简单的局部最优选择,每一步选择都是对当前解的一个扩展,直至获得问题的完整解。
- 贪心算法总是做出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优解。
解空间
- 所有可能的解向量构成了问题的解空间。
- 在最坏情况下,时间代价为指数阶。
- 0/1背包问题的解空间是子集树
- 对于一个具有n个元素的集合,其子集个数是2^n.
- TSP问题的解空间是排列树
回溯法与分支限界法
(1)搜索策略
- 回溯法采用深度优先的策略搜索解空间树
- 分支限界法采用广度优先的策略搜索解空间树
(2)回溯法——深度——对蛮力法的一种改进策略
- 回溯法可以看作是蛮力法的一种改进策略。
- 回溯法从根节点出发,按照深度优先策略遍历问题的解空间树,搜索满足约束条件的解。对于解空间树的某个节结点如果该结点满足问题的约束条件,则进入该子树继续进行搜索,否则跳过该结点为根的子树,也就是剪枝。
(3)分支限界法——广度——对蛮力法的一种改进策略
- 对于最大化问题
- 上界:根据界限函数确定目标函数的上界。
- 下界:用某种启发方法得到目标函数的下届。
(4)限界剪枝法的关键问题——以付出一定计算代价为基础
- 确定合适的限界函数——能在搜索的早期对超出目标函数界的节点进行丢弃。
- open表的存储结构
- 确定最优解的各个分量
A*启发式算法
- A-star算法是求最短路径非常有效的一种搜索算法,也是搜索问题常用的启发式算法。
- 所谓启发式搜索是通过启发式函数(估价函数)引导算法的搜索方向,以达到减少搜索节点的目的。
具体问题
排序算法的时间复杂度
ㅤ | 最好 | 平均 | 最坏 |
快速排序 | O(n*logn) | O(n*logn) | O(n^2) |
ㅤ | ㅤ | ㅤ | ㅤ |
流水作业调度问题
0/1背包问题
n皇后问题
数塔问题
Dijkstra算法
最长公共子序列
Kruskal算法
归并排序
循环赛
哈夫曼算法
TSP问题
- Author:Koreyoshi
- URL:https://Koreyoshi1216.com/article/16cc7b13-c6a7-803b-9c9b-c161d072a30b
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!