算法分析与设计期末考试复习GDPU

news2025/1/12 21:50:18

重点内容:

绪论:
简单的递推方程求解  1.19(1)(2) 、 教材例题  
多个函数按照阶的大小排序  1.18            

分治法:
分治法解决芯片测试问题   
计算a^n的复杂度为logn的算法(快速幂) 
分治法解决平面最近点对问题  (增加预处理) 
锦标赛算法求第二大数的步骤(链表)         
分治法S中第k小元素的归约过程      (m*)       

动态规划:
最长公共子序列问题:蛮力法和动态规划的递归方程或递推关系、动态规划的伪码(填空)、优化函数和标记函数(填空)
矩阵链的乘法问题 : 蛮力法和动态规划的递归方程或递推关系、动态规划的伪码(填空)、备忘录和标记函数(填空)
最大子段和

贪心法:4.3  4.4    4.16  4.21  
    主要设计思想、伪码、复杂度、实例求解
贪心法:活动安排问题问题实例求解、最小延迟调度问题实例求解

回溯:
(填空)回溯算法的主要设计步骤,用回溯算法解决图的m着色问题、货郎问题(TSP)
(填空)分支界限的基本下,用分支界限算法解决最大团问题、背包问题

绪论:

多个函数按照阶的大小排序

简单的递推方程求解 

大小关系:指数级>多项式级>对数多项式级>常数级

化简:

主定理

【北大公开课】  算法设计与分析 屈婉玲教授 (76p)icon-default.png?t=N7T8https://www.bilibili.com/video/BV1Ls411W7PB/?p=16&share_source=copy_web&vd_source=7ffbd7feaeedb3d59fb21e59435a53d8

教材例题

【北大公开课】  算法设计与分析 屈婉玲教授 (76p)icon-default.png?t=N7T8https://www.bilibili.com/video/BV1Ls411W7PB/?p=17&share_source=copy_web&vd_source=7ffbd7feaeedb3d59fb21e59435a53d8

分治法:

分治法解决芯片测试问题   

问题描述

一次测试过程:

两片都是好结果,就留一片。其他情况全丢掉

蛮力算法时间复杂度

蛮力算法的判断好坏标准(一片芯片怎么判断好坏)

n为奇数情况

n为偶数情况

结论还是不变

分治法

假设 n为偶数,将 n片芯片两两一组做 测试淘汰,剩下芯片构成子问题,进 入下一轮分组淘汰。(类似锦标赛)

分治命题正确性

时间复杂度

主定理第三种情况ヽ(ー_ー)ノ直接记吧

计算a^n的复杂度为logn的算法(快速幂) 

迭代伪码

输入:底数a,指数n

输出:计算完成的结果result

result=1; //用于存储结果

while n不为0时 do

        if n % 2 == 0 then

                result =result *a        //奇数需多乘一次底数

        a=a*a;

        n/=2;
return result

递归伪码

输入:底数a,指数exponent

输出:计算完成的结果

function fastpow(a, exponent):
    if exponent == 0
        then return 1
    if exponent == 1
        then return a
    temporary <- fastpow(a, exponent/2)
    if exponent % 2 == 0
        then return (temporary  * temporary) 
    else
        return (temporary * temporary * a) 

时间复杂度

分治法解决平面最近点对问题  (增加预处理) 

伪码

直接看课吧【【北大公开课】  算法设计与分析 屈婉玲教授 (76p)】icon-default.png?t=N7T8https://www.bilibili.com/video/BV1Ls411W7PB/?p=25&share_source=copy_web&vd_source=7ffbd7feaeedb3d59fb21e59435a53d8

未改进的算法时间复杂度

改进:增加预处理

括号里面是第几个点,比如-2(3)就是横坐标x=-2,第p3点

改进后算法的时间复杂度

锦标赛算法求第二大数的步骤(链表)         

题目描述&蛮力算法时间复杂度

锦标赛算法

伪代码

7是第二小

时间复杂度

算法比较分为两部分:第一部分是找最大元素max的比较次数,显然为n-1;第二部分是在产生max后链表中找最大所需的比较次数。

分治法S中第k小元素的归约过程      (m*)       

问题描述

简单的算法(k次最小算法 or 排序后输出)

分治算法

每一组就是一列,先排序,上面大下面小

8,7,10,4不确定大小,所以要和m*比较

伪代码 

时间复杂度

动态规划:

最长公共子序列问题:

蛮力法的时间复杂度O(n*2^{m})

#include <iostream>
#include <string>
using namespace std;

string lcs_bruteforce(const string& X, const string& Y) {
    int m = X.length();
    int n = Y.length();
    if (m == 0 || n == 0) {
        return "";
    } else if (X[m-1] == Y[n-1]) {
        return lcs_bruteforce(X.substr(0, m-1), Y.substr(0, n-1)) + X[m-1];
    } else {
        string lcs1 = lcs_bruteforce(X.substr(0, m-1), Y);
        string lcs2 = lcs_bruteforce(X, Y.substr(0, n-1));
        if (lcs1.length() > lcs2.length()) {
            return lcs1;
        } else {
            return lcs2;
        }
    }
}

int main() {
    string X = "ABCBDAB";
    string Y = "BDCAB";
    string lcs = lcs_bruteforce(X, Y);
    cout << "The longest common subsequence is: " << lcs << endl;
    return 0;
}

参考代码

动态规划的递归方程或递推关系

✨代码实现: 

【算法设计与分析MOOC-青岛大学-张公敬教授】

动态规划的伪码(填空)

动态规划时间复杂度O(m*n)

追踪解时间复杂度O(m + n)

优化函数(填空)

X = 【1, 2, 3】, Y = 【1, 3】按照下图关系推

标记函数(填空)

b数组用来设立标记,算法结束后可以利用这些标记追踪最优解。

例子:

怎么推?
c[i][j]矩阵:

按照信息表即可推出b矩阵(数组)

 如何追踪解? 
b[i][j]为1时,对应X、Y序列第i行,j列中的元素

矩阵链的乘法问题:

蛮力法的时间复杂度\Omega(2^{2n}/{n^{\frac{3}{2}}})

动态规划的递归方程或递推关系

动态规划的伪码(填空)

递归实现:

时间复杂度

迭代实现:

备忘录(填空)

看着递推方程来填空

自己复制代码,断点调试设置变量查看吧

#include <bits/stdc++.h>
using namespace std;
//输入:矩阵链Ai…j的输入为向量P=<Pi-1,Pi,…,Pj>,其中:1<=i<=j<=n.
//输出:计算Ai…j的所需最小乘法运算次数m[i,j]和最后一次运算位置s[i,j]。
const int N = 101;
int m[N][N], s[N][N];
int a[] = {30, 35, 15, 5, 10, 20};

void MatrixChain(int a[N], int n)
{
	for(int i=1; i<=n; i++)
		m[i][i] = 0;
		
	for(int r=2; r<=n; r++)
	{
		for(int i=1; i<= n-r+1; i++)
		{
			int j = i+r-1;
			m[i][j] = m[i+1][j] + a[i-1]*a[i]*a[j];
			s[i][j] = i;
			
			for(int k=i; k<=j-1; k++)
			{
				int t = m[i][k] + m[k+1][j] + a[i-1]*a[k]*a[j];
				if(t < m[i][j])
				{
					m[i][j] = t;
					s[i][j] = k;
				}
			}
		}
	}
}

int main()
{
 	MatrixChain(a, 6);
 	cout << "The number of least multiplication operations:" << endl;
 	cout << m[1][5] << endl;
 	cout << "Position of the last operation:" << endl;
 	cout << s[1][5] << endl;
 	cout << "array s:" << endl;
 	for(int i=1; i<=5; i++)
 	{
 		for(int j=1; j<=5; j++)
 		{
 			cout << s[i][j] << ' ';
		}
		cout << endl;
	 }
 	return 0;
}

标记函数(填空)

记录k的值,k就是分割线

最大子段和

力扣(LeetCode)53.最大子数组和

蛮力算法O(n^2--n^3)

O(n^{3})

改进后O(n^{2})

分治算法O(nlogn)

思路:一路分分分,分到只有左边一个和右边一个的时候开始计算。分治区间左右两半分别求和放好(leftsum, rightsum),还有一个跨边界,把边界左边(整个数组第一个元素)和右边(整个数组最后一个元素)全加起来

分治区间:当前递归函数所计算的左右区间


代码: 

————————————————
版权声明:图片为博主原创文章摘录
链接:https://blog.csdn.net/weixin_73523694/article/details/134515793 

动态规划算法

类似前缀和思想,判断前一个数是否大于0,不是就不加,是就加,当前数+前一个数。以达到最大和的目的

时间复杂度O(n),空间复杂度O(n)

伪代码写成代码: 

int MaxInterval(vector<int> a, int len) {
	vector<int> dp(len);
	int res = -INF;
	dp[0] = a[0];
	for(int i = 1; i < len; i ++ ) {
		dp[i] = max(a[i], dp[i - 1] + a[i]);
		res = max(res, dp[i]);
	}
	return res;
}

贪心法:

4.3

最坏情况下的时间复杂度函数

主要设计思想、伪码、复杂度、实例求解 

这是一个经典的区间覆盖问题,可以通过贪心算法来解决。我们的目标是用最少的基站覆盖所有房子,且每个房子都在至少一个基站的左右4千米范围内。

主要设计思想

1. 贪心策略:为了覆盖最多的房子,每次选择离A(起点)最近尚未被覆盖的房子。房子的位置+4km作为新基站的位置。这样可以确保新基站能覆盖最多未被覆盖的房子。
2. 迭代过程:从房子A开始,依次考虑每个房子,如果当前房子不在已有基站的覆盖范围内,则在其位置往后4km设置新的基站。
3. 覆盖检查:对于每个房子,检查是否已经在任意基站的4千米范围内。如果是,则该房子已被覆盖;如果不是,则需要在新的位置设置基站。

伪码
输入:房子距离A的列表distances[1...n]
输出:基站位置列表base_stations

初始化基站位置列表base_stations为空

对房子距离A的列表进行升序排序
base_stations[1] <- distances[1]+4

for i = 1 to n do
    rightpoint <- base_stations[i]+4
    if distances[i] > rightpoint then
            基站位置列表base_stations添加设置新基站位置distances[i]+4

return base_stations

课本答案:

时空复杂度分析

        时间复杂度:最坏情况下,我们需要遍历所有的房子来检查是否已经被覆盖,因此时间复杂度为O(n),其中n是房子的数量。
        空间复杂度:除了输入的距离列表,我们还需要存储基站位置列表,因此空间复杂度为O(n)。

实例求解

假设房子到A的距离分别是[0, 5, 10, 15]千米。按照上述算法:

1. 从房子A开始,设置基站1(位置0+4千米),覆盖范围[0, 8]千米。房子B(位置5千米)在覆盖范围内。
2. 房子C(位置10千米)不在覆盖范围内,设置基站2(位置10+4千米),覆盖范围[10, 18]千米。房子D(位置15千米)在覆盖范围内。

最终基站位置为[4,14]千米。

这个算法通过贪心策略确保了使用最少数量的基站来覆盖所有的房子,同时满足每个房子都在至少一个基站的4千米范围内。

4.4  

题目:

主要设计思想、伪码、复杂度、实例求解

这是一个典型的区间覆盖问题,我们可以通过贪心算法来解决这个问题。算法步骤如下

设计思想

        由于点已经按照从小到大的顺序排列,我们可以直接从最小的点开始,每次都尽可能选择包含更多未被覆盖的点的闭区间。具体步骤如下:

1. 初始化闭区间集合为空,当前覆盖的点集也为空。
2. 从未被覆盖的点中选择最小的一个作为新闭区间的左端点。
3. 向右扩展这个长度为1闭区间直到不能覆盖更多的点为止。
4. 将这个闭区间加入到闭区间集合中,记录个数和位置,并将覆盖的点标记为已覆盖。
5. 重复步骤2-4,直到所有的点都被覆盖。

伪码
输入:点集x1, x2, ....., xn
输出:闭区间集合

初始化闭区间集合S为空

for i=1 to n do
    选择未被覆盖的最小点x_i
    设置闭区间右端点right <- x_i + 1
    while x_i+1 < right do
        i <- i+1; (i++的意思)
    将[x_i, right]添加到S

end for

时空复杂度分析

        时间复杂度:算法需要遍历所有的点来确定每个闭区间,因此时间复杂度为O(n),其中n是点的数量。
        空间复杂度:除了输入的点集外,我们需要存储每个闭区间集合位置,因此空间复杂度也是O(n)。

实例求解

假设给定的点集为{1,2,3,7,8,9},按照上述算法:

  • 对于点1,2,闭区间是[1, 2]
  • 对于点3,闭区间是[3, 4]
  • 对于点7,8,闭区间是[7, 8]
  • 对于点9,闭区间是[9, 10]

最终得到的闭区间集合是{[1,2],[3,4],[7,8],[9,10]},闭区间个数4个。覆盖了所有的点。

这个算法确保了每个点都被一个长度为1的闭区间覆盖,满足了题目的要求。

课本答案:

4.16

主要设计思想、伪码、复杂度、实例求解

设计思想:双指针算法(贪心)

算法的核心思想是利用两个指针分别遍历序列A和B。由于B是A的子序列,因此B中的每个元素都必须按顺序出现在A中。我们可以通过比较两个序列当前指针所指向的元素来检查这一点。如果B的当前元素与A的当前元素匹配,则将B的指针向前移动一位;无论是否匹配,A的指针都向前移动一位。如果B的指针移动到了序列末尾,说明B是A的子序列。

课本答案:

伪码:
算法4.16 IsSubsequence
输入:A、B两个序列
输出:如果B是A的子序列,输出True;否则返回False
i <- 0
j <- 0
while i < n and j < m do
        if A[i] == B[j] then
            j <- j+1
        i <- i+1

if j == m then
       Return True
else
       Return False

时空复杂度分析:

时间复杂度为O(n),因为最坏的情况下,我们需要遍历整个A序列一次。
空间复杂度为O(1),因为我们只使用了常数个辅助变量。

实例求解:

假设A = [1, 2, 3, 4, 5],B = [2, 4]。

- 初始化i = 0, j = 0。
- 比较A[0]与B[0],不匹配,i = 1。
- 比较A[1]与B[0],匹配,i = 2, j = 1。
- 比较A[2]与B[1],不匹配,i = 3。
- 比较A[3]与B[1],匹配,i = 4, j = 2。
- 此时j已经等于B的size,说明B是A的子序列。

因此,算法判断B是A的子序列是正确的。

4.21  

题目:

主要设计思想、伪码、复杂度、实例求解

设计思想:

伪码:
算法4.21 FindSmallestSet(A)
输入:n个集合A1,...,An。
输出:最小的满足条件的集合S。
对n个集合的右端点b进行升序排序
A[1]作为一个交集,加入S
x <- A[1].b1
for i <- 1 to n do

        if A[i]的左端点小于当前交集右端点x then
                选一个集合A[i]作为一个交集,加入S
                x <- A[i].bi
return S

课本答案:

bi就是右端点

 

时空复杂度分析:

时间复杂度为O(nlogn),因为需要对集合进行排序。
空间复杂度为O(n),用于存储集合S。

实例求解:

假设有集合 A1 = [1, 3],  A2 = [2, 6],  A3 = [7, 10],  A4 = [8, 9]。

- 对n个集合的右端点进行升序排序,A1,A2,A4,A3。
- 选择A1,加入S中。由于A2左端点小于A1右端点,所以删除A2
- 选择A4,加入S中。由于A3左端点小于A4右端点,所以删除A3
- 返回S = {A1, A4}作为最小集合,满足每个Ai至少含有S中的一个数。

活动安排问题实例求解

如果第二个活动的开始时间大于第一个活动的结束时间,就加入集合A

先按照起始时间排序

最小延迟调度问题实例求解

题目P91

回溯:

回溯算法的主要设计步骤

用回溯算法解决图的m着色问题

搜索策略:深度优先

时间复杂度O(nm^{n})

第一个解向量:< 1, 2, 1, 3, 1, 2, 3 >。根据对称性,只需搜索 1/3 的解空间. 当点1和点2确定, 即 以后,只有1个解,点2为根的子树中也只有1个解。由于3个子树的对称性,总共6个解。
对称性:3的地方换成2,2的地方换成3

货郎问题(TSP)旅行售货员问题

定义(题目)

解向量 & 约束条件 & 搜索空间(子结点排列规则)

【【北大公开课】  算法设计与分析 屈婉玲教授 (76p)】

太多不更了,看视频吧

分支限界

相关概念

      目标函数(极大化或极小化)

      约束条件(解满足的条件)

      可行解: 搜索空间满足约束条件的解

      最优解: 使得目标函数达到极大 (或极小)的可行解


用分支限界算法解决最大团问题

题目

代价函数

实例

来不及就直接背吧

用分支限界算法解决背包问题

题目:

代价函数

\Delta是理想情况下,每一个小空隙都装第k+1件物品。实际情况是第k+1件物品塞不满这些空隙的

分支策略:深度优先

界函数

界函数初始值0,到达橙色框后得到了更好的可行解,就更新界函数的值为12。
之后的深度搜索中,当代价函数大于界函数时,继续向下搜索。当代价函数小于界函数时,就可以停止向前了,因为往下也得不到更好的,这已经是下面的叶子结点中最大的一个代价函数值

习题 

【算法分析与设计】【期中(末)复习题】【2022秋】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1819897.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

值得关注的BTC二层 BitlayerLabs,以及好用的bitget钱包

值得关注的比特币二层 BitlayerLabs Bitlayer BitlayerLabs 是基于 BitVM 的与比特币安全等效的 Layer2。创新的BitRC-20资产框架为生态系统提供了丰富的资产类别。 为什么推荐bitlayer&#xff1f; Framework Ventures 和 ABCDE Capital 领投&#xff0c;OKX Ventures 等参…

微软开发基于深度学习的地球大气基础模型-Aurora

微软研究院的研究人员开发了大气基础模型“Aurora”&#xff0c;https://arxiv.org/abs/2405.13063v1 利用超过一百万小时的多样化天气和气候数据进行训练&#xff0c;能够预测各种大气条件&#xff0c;包括数据有限、变量异构和极端事件&#xff0c;并在全球空气污染和高分辨…

什么是CPT❓CPT中卖方责任是什么?

CPT :CPT 运费付至 &#xff08;……指定的目的地&#xff09; 运费付至&#xff08;……指定的地点&#xff09;”是指卖方向其指定的承运人交货&#xff0c;但卖方还必须支付将货物运至目的地的运费。即买方承担交货之后一切风险和其他费用。 “承运人”是指任何人&#xff…

LabVIEW开发CAN通讯协议

在LabVIEW中开发CAN&#xff08;Controller Area Network&#xff09;通讯协议时&#xff0c;需要全面考虑硬件选择、驱动安装、通信配置、错误处理、数据解析和实时性等多个方面。本文详细介绍了在LabVIEW中实现CAN通讯时的关键点和最佳实践&#xff0c;确保系统的稳定性、可靠…

VScode对比代码功能

CtrlShiftP选择第一行Compare&#xff0c;当前文件就和选中文件对比改动了。

梯度下降法、牛顿法、条件熵

梯度下降法、牛顿法&#xff08;可见南瓜书&#xff09; 梯度下降法 深度学习&#xff1a;梯度下降法数学表示式的详细推导 牛顿法 条件熵 在李航老师的书中&#xff0c;第六章最大熵模型这里有个条件熵的定义&#xff1a; 推导如下&#xff1a; 其他一些事实&#xff1a;…

最小生成树prim算法详解

prim算法解决的是最小生成树问题&#xff0c;即在一个给定的无向图G中求一棵生成树T&#xff0c;使得这棵树拥有图G中的所有顶点&#xff0c;且所有边都是来自图G中的边&#xff0c;并且满足整棵树的边权之和最小。 prim算法的基本思想是对图G设置集合S来存放已被访问的顶点&a…

IPTCP知识

1. IP&#xff1a; IP地址是一个32位的二进制数&#xff0c;通常被分割为4个“8位二进制数”IP地址分类&#xff1a;A类地址、B类地址、C类地址、D类地址、E类地址 A类地址分配给规模特别大的网络使用&#xff0c;B类地址分配给一般的中型网络&#xff0c;C类地址分配给小型网…

复合机器人以其高度的灵活性和操作效率,展现了显著的优势

随着工业4.0的深入推进和智能制造的快速发展&#xff0c;复合机器人作为一种集成移动机器人和工业机器人功能的先进设备&#xff0c;正逐步成为工业自动化领域的新宠。特别是在磁钢上下料的应用中&#xff0c;复合机器人以其高度的灵活性和操作效率&#xff0c;展现了显著的优势…

6.13作业

自由发挥登录窗口的应用场景&#xff0c;实现一个登录窗口界面 #include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {//设置窗口标题this->setWindowTitle("QQ");//设置窗口图标this->setWindowIcon(QIcon("C:/Users/…

软件性能测试的测试内容和指标介绍,软件性能测试公司推荐

软件性能测试是对软件系统进行评估的一种方法&#xff0c;旨在测量软件在各种条件下的性能表现&#xff0c;以便确定其在实际使用中的可靠性、稳定性和可扩展性。通过性能测试&#xff0c;可以发现软件系统在高负载、并发访问和大数据量处理等方面的性能瓶颈&#xff0c;并提供…

如何基于 Python 快速搭建 QQ 开放平台 QQ 群官方机器人详细教程(更新中)

注册 QQ 开放平台账号 账号注册 QQ 机器人&#xff1a;一个机器人可以被添加到 群聊/频道 内对话&#xff0c;QQ 用户也可以直接跟机器人 单独对话。 开发者账号主体要求 单聊对话&#xff1a;【定向邀请】 群聊场景&#xff1a;仅支持企业主体【个人主体暂不支持】 频道场…

SpringAI学习及搭建AI原生应用

文章目录 一、SpringAI是什么二、准备工作1.GPT-API-free2.AiCore3.eylink 三、对话案例实现1.创建项目2.实现简单的对话 四、聊天客户端ChatClient1.角色预设2.流式响应3.call和stream的区别 五、聊天模型提示词提示词模板 六、图像模型(文生图)七、语音模型1.文字转语音(文生…

数据结构之线性表(2)

顺序表中的动态存储 上文我们了解到了顺序表中的静态顺序表的相关操作&#xff0c;今天我们来学习动态顺序表的知识。 为什么会存在动态顺序表呢&#xff1f;&#xff1f; 原因&#xff1a;静态顺序表给定的数据容量固定&#xff0c;多了浪费&#xff0c;少了不够用。 首先我…

基于jeecgboot-vue3的Flowable流程-流程处理(二)

因为这个项目license问题无法开源&#xff0c;更多技术支持与服务请加入我的知识星球。 对应VForm3&#xff0c;原先的后端解析也要做调整 1、获取历史任务的表单信息 // 获取历史任务节点表单数据值List<HistoricVariableInstance> listHistoricVariableInstance his…

API工具--Apifox和Postman对比(区别)

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

Web端在线/离线Stomp服务测试与WebSocket服务测试

Stomp服务测试 支持连接、发送、订阅、接收&#xff0c;可设置请求头、自动重连 低配置云服务器&#xff0c;首次加载速度较慢&#xff0c;请耐心等候 预览页面&#xff1a;http://www.daelui.com/#/tigerlair/saas/preview/lxbho9lkzvgc 演练页面&#xff1a;http://www.da…

Linux_应用篇(17) FrameBuffer 应用编程

本章学习 Linux 下的 Framebuffer 应用编程&#xff0c; 通过对本章内容的学习&#xff0c; 大家将会了解到 Framebuffer 设备究竟是什么&#xff1f;以及如何编写应用程序来操控 FrameBuffer 设备。 本章将会讨论如下主题。 ⚫ 什么是 Framebuffer 设备&#xff1f; ⚫ LCD 显…

vscode 连接 GitHub

文章目录 连接 GitHub一、通过 SSH 连接 github二、通过 HTTPS 连接 github 连接 GitHub 在 vscode 中首次使用 git push 命令时会要求输入 github 账户的 username 和 password&#xff0c;这种基本身份验证在 2021.8.13 以前还是可以的&#xff0c;之后的话&#xff0c;就会…

【太原理工大学】软件安全技术—书本重点梳理、带背

收回我上一篇的话&#xff0c;这科挂人还是挺狠的&#xff0c;去年好像挂了四十号人 ( 老师没有划重点&#xff0c;这篇是我自己根据之前的博主的和课本总结的一些重点&#xff0c;本篇为理解性带背。(&#xff61; _ &#xff61;) ### 第一章&#xff1a;软件安全基础 - **零…