前言
本系列文章为观看b站视频以及b站up主@zst_2001
系列视频所做的笔记,感谢相关博主的分享。如有侵权,立即删除。
视频链接:视频链接(注:文章中有关图片、以及网友的相关评论与总结等内容未标明出处均出自该视频,感谢大家的分享!)
b站up主页:b站up
章节提要
难度较大,力争6~8分
一、分治法
1、递归技术
递归:在运行过程中调用自己
2、二分查找
二、回溯法
三、贪心法
- 贪心法:只考虑局部最优,不考虑全局最优。
四、动态规划法
- 动规与分治的区别:动态规划法需要用到查表的方式来解决问题;而分治法不用。
五、答题技巧
- 在时间复杂度表示中,log2(n)等价与lgn。
- 动态规划法一般会出现递归式,题目中出现递归式的时候要考虑是不是使用了动态规划法。
- 题目中出现循环边界的代码空,一般都与递归式有一定的关联。
- 注意在代码填空时不要将
==
写错成=
。 - 算法代码填空时,一定要小心,注意在有比较两个变量值大小的代码时,注意是否有
=
。 - 代码填空时,题目中的信息给出了很多提示,比如题目中的递归式,一定要注意题目信息。
- 递归是自顶向下,然后返回计算;动态规划是自底向上运算,若动态规划采用递归求解,则也是自顶向下的。自顶向下(从大问题开始不断递归求解小问题,小问题求解完后返回,从而得到大问题的解);自底向上(从小问题开始,不断扩大问题规模,从而得到大问题的解)。
- 仔细对比代码和题目所给出的公式。
- 注意当要写大于(小于)等于时,写成
>=
或<=
不要写成≥和≤。
六、案例分析
1、案例1
试题分析:
- 最先适宜:按顺序装,装不下新开一个箱子; 最优:按顺序装,装不下换下一个再试试,装满为止。
- 赋值的单一语句的复杂度是O(1)级别;单循环O(n);多重循环复杂度为O(n^2)级别。
正确答案:
问题1:(1)j=0;(2)b[j]=b[j]+s[i]((2)缺失的是:把货物放到箱子中);(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)否
2、案例2
正确答案:
问题1:(1)k<=r;(2)arr[k]=right[j];(3)begin<end;(4)mergeSort(arr,mid+1,end)
问题2:(5)分治;(6)T(n)=2T(n/2)+O(n);(7)O(nlogn);(8)O(n)
问题3:(9)n1+n2