软考-- 软件设计师(9)-- 算法设计与分析
文章目录
- 软考-- 软件设计师(9)-- 算法设计与分析
- 前言
- 一、章节考点
- 二、分治法
- 三、回溯法
- 四、贪心法
- 五、动态规划法
前言
考试时间:每年5月、11月,软件设计师每年都会开考。
考试条件:三不限
考试形式: 一共两门
计算机于软件工程基本知识--120分钟--机考--选择题--75分(45及格)
软件设计--120分钟--机考--简答题(4道必做,1道二选一做)--75分(45及格)
两门都得一次性及格才算通过,一共4小时考试时间。
软件行业从事人员学习视频:https://www.bilibili.com/video/BV1Qc411G7fB?vd_source=d82c92f6c1fd8c6785c6b557a68cb7b3
推荐博客:http://t.csdnimg.cn/5VzY5
推荐bilibli博主:zst_2001
由于本人从事软件开发4年,有一定的基础,所以本系列博客笔记皆从于第一个视频记录笔记。
一、章节考点
Tips:会出个下午题,15分,是个压轴题,这一章很重要 也 很难,视频博主建议是了解基本概念,能区分算法用的那种思想即可,但是大家看我这个文章应该都有点基础,所以还是建议吃透这一章,拿下这15分。c语言必须掌握,下午题必考。Java和c++要会其中一门。
分治法、回溯法、贪心法、动态规划法
二、分治法
分治法:这个和java多线程里面的ForkJoin 是同样的算法,相信大家如果做过数据清洗,应该使用过forkJoin
三个步奏:
1、分解:将原问题分解为一系列的子问题;
2、求解:递归求解哥哥问题的子问题。若子问题足够小,则直接求解;
3、合并:将问题的解合并成原问题的解。
三、回溯法
四、贪心法
五、动态规划法
0-1背包问题:表示一个物体要不全部装进去,要不不装进去;必须整体装进去。
部分背包问题:表示一个物体可以切割一部分装进去。部分背包问题一般来说要计算一个物品单位体重的价值,然后部分装进去。
下面是 0-1 背包问题,第一个问视频博主的思想是:
1、找出背包价值最大的两个价值6 6,装进去背包还剩余4;
2、比较一下就只能装入容量剩余4只能装下2了,2对应的价值为3,故总价值x = 6+6+3 = 15;
这种思想是穷举法,可以快速的解决小问题,但是真正0-1背包问题的解决思路肯定不是这样的
这个算的太简陋了。待我研究研究.......
分析一下下面的式子:
c(i,j):价值;
i:物品数量;
j:物品容量
右边大括号括起来的就是动态规划法的递归算法:
1、若i=0或j=0 则c(i,j) = 0;
2、若w[i]>j,则c(i,j) = c(i-1,j);
3、其他情况为max{c(i-1,j),c(i-1,j-w(i))}
c(i,j)的定义:就是 i个物品、容量j的0-1背包问题的最大包装价值,带入到本题目中就是求解c(n,w)。
再带入数值的话,其实就是求解c(5,10)。而这个是个递归算法,其最终算到的肯定是i=0和j=0,带入本体题就是n=0和w=0。
也就是说,从n=5、w=10到n=0、w=0要计算多少步奏,就是时间复杂度,也就是O(nw)
吐槽一下:这个视频博主讲的真的是太潦草了,没点基础真不行,没基础的还是看看zst的吧。有基础的看完这个,二轮看zst的,或者背诵知识
点的时候用zst的笔记背诵,这个完全就是进阶人员快速掌握知识看的,如果你只剩不到一个月,那看这个吧。
部分背包问题:
1、将五个物品单位重量的价值算出来并且归并排序得到{3,1.5,1.5,0.833,0.8}
2、计算最大价值 = 3*2+1.5*2+1.5*4+0.833*2 = 16.666,选D
归并排序的算法时间复杂度为O(nlgn),选择B
算法时间复杂度排序口诀(小->大):常对幂指阶