没有合适的资源?快使用搜索试试~ 我知道了~
山东大学软件学院算法设计与分析2024年以前的部分往年题总结附答案
需积分: 0 1 下载量 122 浏览量
2024-06-14
16:16:11
上传
评论 1
收藏 1.91MB DOCX 举报
温馨提示
![preview](https://dl-preview.csdnimg.cn/89432824/0001-df3416798726a5ed5c1175a8fda44ecd_thumbnail-wide.jpeg)
![preview-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/scale.ab9e0183.png)
试读
22页
山东大学软件学院算法设计与分析2024年之前的往年题小结,带着自己做的答案,可能答案有不对的地方。总体而言每一年的考试都是比较简单的,大家好好复习PPT上的内容就可以了。英文题也出的比较简单,大家都可以看得懂。之前也发过2024年的往年题回忆版,大家也可以作为参考。RAM听刘宏老师说也是考纲的内容,但是考的比较少,今年也没出。祝愿学弟学妹们都考出好成绩。有的是学长们朋辈辅导的内容我直接把答案贴上了,如有侵权删。
资源推荐
资源详情
资源评论
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![thumb](https://img-home.csdnimg.cn/images/20210720083646.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![](https://csdnimg.cn/release/download_crawler_static/89432824/bg1.jpg)
1. Floyd - Warshall 算法,简述算法思想,分析时间复杂度。
算法思想:
Floyd-Warshall 算法基于动态规划思想,它维护一个二维的数组 d,其中 d[i][j]
表示从顶点 i 到顶点 j 的最短路径长度。算法的核心思想是动态规划转移方程,
假设 k 为中间节点,如果从 i 到 j 的路径经过中间节点 k,则有:
d[i][j] = min(d[i][j], d[i][k]+d[k][j])
该式的意思是,如果从 i 到 j 的路径经过 k 的话,那么 i 到 j 的最短路径长度
就可以通过 i 到 k 的最短路径长度加上 k 到 j 的最短路径长度得到。通过枚举
所有的 k,我们可以逐步计算出 d 数组的所有值,从而得到任意两个顶点之间的
最短路径。
时间复杂度:
Floyd-Warshall 算法的时间复杂度为 O(n^3),其中 n 为图的顶点数。这是因为
算法需要三重循环来枚举 i、j 和 k,每一次循环需要 O(1)的时间来更新
d[i][j]。因此,总时间复杂度为 O(n^3)。
2. 使用动态规划求解:一个字符串允许出现的字符可以是 a、b 或 c,求长度为
n 且不包括两个连续 a 的字符串个数。简述算法思想,写出伪代码,分析时间复
杂度、空间复杂度。
动态规划的思想来解决。我们定义一个状态数组 dp[i],表示长度为 i 的字符串
中不包含两个连续的 a 的字符串的个数。对于第 i 个字符,若他是 b,c 则第 i-1
个字符可以是任意一个,若是 a,第 i-2 可以是任意字符,但第 i-1 可以是 b
或 c。因此,对于第 i 个字符,它可以为 b 或 c,也可以为 a(前面必须是 b 或
c),因此可以得到递推式:
dp[i]= (dp[i-1] + dp[i-2])*2,其中 dp[1]=3,dp[2]=8。
dp[1] = 3
dp[2] = 8
for i = 3 to n
dp[i] = (dp[i-1] + dp[i-2])*2
return dp[n]
3. 使用动态规划求解:x 的初值为 1,每一步可对 x 进行加 1 或乘 2 的操作,求
对一个大于 0 的整数 n 来说,x 经过操作后等于 n 所需的最小步数。写出 Bellman
方程,伪代码。
![](https://csdnimg.cn/release/download_crawler_static/89432824/bg2.jpg)
function minSteps(n: integer) -> integer:
let f be an array of size n+1
f[1] = 0
for i from 2 to n do
f[i] = f[i-1] + 1 // 如果 i 是奇数, 只能执行 +1 操作
if i mod 2 == 0 then
f[i] = min(f[i], f[i div 2] + 1) // 如果 i 是偶数, 可以选择执
行 +1 或 /2 操作
return f[n]
时间复杂度 O(n)
4. 使用动态规划求解:给出两个字符串 s1,s2,求 s1,s2 的最长公共子序列长
度,写出 Bellman 方程,分析时间复杂度。
例如:字符串 S1 为{a,s,d,f,g,h,q,e},S2 为{b,s,f,h,q,w,p}。他们的最长公
共子序列的长度就是 4,即: sfhq
假设 s1 和 s2 分别是长度为 m 和 n 的字符串。
令 dp[i][j]表示 s1 的前 i 个字符和 s2 的前 j 个字符的最长公共子序列长度。
则 Bellman 方程为:
当 i=0 或 j=0 时,dp[i][j]=0。
当 s1[i-1]=s2[j-1]时,dp[i][j] = dp[i-1][j-1]+1。
当 s1[i-1] != s2[j-1]时,dp[i][j]= max(dp[i-1][j], dp[i][j-1])。
最终,dp[m][n]即为 s1 和 s2 的最长公共子序列长度。
时间复杂度分析:
计算 dp[i][j]需要根据之前计算得到的 dp 值,因此需要填充整个 dp 数组,时
间复杂度为 O(m*n)。
5. P、NP、NPC、NP-hard、多项式归约的概念和性质。
P 问题(P):指的是可以在多项式时间内解决的问题,即存在一个算法可以在多项
式时间内给出问题的解。
NP 问题(NP):指的是可以在多项式时间内验证给定解的问题。如果一个问题的解
可以在多项式时间内被验证,那么它被认为是一个 NP 问题。
NPC 问题(NP-Complete):指的是既属于 NP 问题又具有一种特殊性质的问题。如
果一个问题是 NP 问题,并且任何其他 NP 问题都可以在多项式时间内归约到它,
那么它被称为 NP-Complete 问题。
NP-hard 问题:指的是在计算复杂性理论中被认为至少与 NP 问题一样困难的问题。
NP-hard 问题可能不属于 NP 类,但任何 NP 问题都可以在多项式时间内归约到它。
![](https://csdnimg.cn/release/download_crawler_static/89432824/bg3.jpg)
多项式归约:指的是将一个问题转化为另一个问题的过程,使得对原问题的解可
以直接通过解决转化后的问题来获得。如果一个问题可以在多项式时间内归约
到另一个问题,那么它被认为是多项式归约可解的。
6. 求单源最长路径,要求使用动态规划算法(bellman-ford 算法即可),写出伪
代码,时间复杂度,思想,动态规划方程。
思想:Bcllman-Ford 算法使用了动态规划的思想,通过多轮松弛操作逐步更新顶
点之间的最长路径。算法首先将源顶点的距离初始化为 0,然后按照拓扑排序的
顺序依次遍历每个顶点。对于每个顶点,我们通过比较从前驱顶点到当前顶点
的距离加上边的权重与当前顶点的距离的大小,来更新当前顶点的距离值。经
过|V|-1 轮松弛操作后,所有顶点之间的最长路径长度已经得到计算。
Input:有向加权图 G=(V. E),源顶点 s
Output:源顶点 s 到图中所有其他顶点的最长路径长度
1.初始化距离数组 dist[],将源顶点 s 的距离设为 0
2.对于图中的每个顶点 v in V,按照拓扑排序的顺序执行步骤 3-4
3.对于 v 的每个邻接顶点 u,执行步骤 4:
-如果 dist[v] + weight(v, u) > dist[u],则更新 dist[u] = dist[v]+ weight(v, u)
4.如果经过一轮松弛操作后,没有发生任何距离的更新,则终止算法
5.返回距离数组 dist[]作为输出结果
时间复杂度:Bellman-Ford 算法的时间复杂度为 O(|V|*|E|),其中|V|是顶点数,
|E|是边数。由于算法要进行|V|-1 轮松弛操作,每轮松弛操作需要遍历所有的
边,因此总的时间复杂度为 O(|V|*|E|)。
2.给你一个整数数组 nums,请你找出一个具有最大和的连
续子数组(子数组最少包含一个元素),返回其最大和。
(子数组是数组中的一个连续部分)
求一个数组中的最大子数组,利用分治算法,首先第一步
需要做的就是将该数组划分为两个规模相当的子数组
2.第二步就是要分别考虑求解两个子数组的最大子数组,但
是也会出现另外一种情况:原数组的最大子数组可能起始位
置位于 mid 左边,终止位置位于 mid 右边,即 cross_mid,
3.但无论如何,具体情况只可能是以下三种:
(1)最大子数组位于 mid 左边
(2)最大子数组位于 mid 右边
(3)cross_mid
![](https://csdnimg.cn/release/download_crawler_static/89432824/bg4.jpg)
可以维护四个变量
lsum 表示[l,r]内以 I 为左端点的最大子段和
rsum 表示[I,r]内以 r 为右端点的最大子段和
msum 表示[l,r]内最大子段和
isum 表示[I,r]的区间和
超级简单的方法
dp[i]表示以下标 i 指向的元素结尾的所有子数组的最大和
状态转移方程:dp[i] = max(dp[i-1]+nums[i],nums[i])
最后的答案:ans=max(dp[i])
![](https://csdnimg.cn/release/download_crawler_static/89432824/bg5.jpg)
这题的 dp 思路和最长上升子序列类似,倒像是简化版的,这里第 i 个状态只从
第 i-1 个状态转移过来。
int MaxSumOfSub4(){
int res=-INF;
int dp[N];
dp[0]=0;
for(int i=1;i<=cnt;i++){
dp[i]=max(dp[i-1]+nums[i],nums[i]);
res=max(dp[i],res);
}
return res;
}
有 n 个题目,每个题目有 mi 的做题时间和 vi 的分数,问得到 V
分数的前提下,最少需要多少时间做题(假设题目全对),
请写出动规方程,算法思路和伪代码。
剩余21页未读,继续阅读
资源评论
![avatar-default](https://csdnimg.cn/release/downloadcmsfe/public/img/lazyLogo2.1882d7f4.png)
![avatar](https://profile-avatar.csdnimg.cn/d2473281d40e4073ac10a38bfa5ceea6_m0_74026790.jpg!1)
real_pcyyyyyyyy
- 粉丝: 2
- 资源: 1
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
最新资源
- 创新MOM培训文档_物料主数据之包材_240625.pptx
- 医学图像分类数据集:CT胸部扫描癌症分类(4分类)【包括划分好的数据、类别字典文件、python数据可视化脚本 】
- 基于C51单片机设计四位数字频率计数码管显示实验Proteus仿真及软件实例源码.zip
- 基于C51单片机设计MAX7221数码管动态显示程序Proteus仿真及软件实例源码.zip
- DS18B20温度传感器实战应用与源码解析.zip
- python-leetcode面试题解之第384题打乱数组.zip
- python-leetcode面试题解之第383题赎金信.zip
- python-leetcode面试题解之第380题O1插入删除和获取随机元素.zip
- python-leetcode面试题解之第375题猜数字大小II.zip
- python-leetcode面试题解之第374题猜数字大小.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)