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个元素的集合,蛮力法生成子集算法的时间复杂度为
notion image
 
 
 

分治法与减治法

(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问题

 
OS:操作系统概述Web大作业论文
Loading...
Koreyoshi
Koreyoshi
一个无可救药的乐观主义者
Latest posts
软件测试:集成测试
2025-3-25
软件测试:控制流测试
2025-3-25
软件测试:系统测试
2025-3-25
软件测试:数据流测试
2025-3-25
软件测试:测试驱动开发
2025-3-25
软件工程:面向对象的概念和记号
2025-3-24
Announcement
🎉写给自己的2025心愿🎉
保研
国奖
完善博客
学一门乐器
发表一篇论文
拍摄人生照片
去3个城市旅游
专业课知识视频
拍摄毕业季视频
----- 2025 ------
👏希望我们一起变好👏