┏┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅☆
┇ 根据B站视频以及教材做的笔记 ╹◡╹
┇ 视频:https://www.bilibili.com/video/av19665344
┇ 教材:软件设计师考试冲刺(习题与解答)
┗┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅☆
课程内容提要
分治法
- 分治法:把一个比较大而复杂的问题拆分成多个规模较小的子问题,解决问题的难度降低很多。
- 往往需要 递归 技术解决问题。
递归技术
二分查找法
回溯法
回溯法:深度优先的搜索法。
贪心法
- 贪心法:花有限的时间找出一个令人满意的解,这个解不一定是最优解。性价比方案。
- 在背包问题中,单位物品价值越高,越优先选。
动态规划法
动态规划法:与分治法相似,将原问题拆分成多个子问题。不同点在于动态规划法基本需要查表。
试题
【问题1】
(1) j = 0;
(2) b [ j ] = b [ j ] + s [ i ];
(3) min = temp;
(4) b [ m ] = b [ m ] + s [ i ]。
【问题2】
整个时间复杂度以最高的为准。
(5) 贪心法 ;(6) 贪心法 ;(7) O(n2);(8)O(n2)。
【问题3】
最优适宜策略仅局部达到最优,整体不一定达到最优。
(9) 5 ;(10) 4 ;(11) 否 。
【问题1】
(1) k<=r;
(2) arr [ k ] = right [ j ];
(3) begin<end;
(4) mergeSort(arr,mid+1,end)。
【问题2】
由于该题使用了归并排序,且拆分成两个子数组,分别排序后再合并起来。所以采用了分治法的算法设计策略。
时间复杂度为O(nlogn)。
空间复杂度为O(n)。
(5) 分治法;(6) T(n)=2T(n/2)+O(n);(7) O(n)。
【问题3】
(9) n1+n2