16. 数据和算法 大题
关于这一部分,主要涉及到了下午的大题,关于下午的大题,主要涉及了四个考点
分别是分治法,回溯法,贪心法,动态规划法
考验起来较难,需要我们抓住其中的重点,拿到必拿分。
那么,首先,我们先拿讲解下不同的算法实现
首先是分治法
对于这个算法,可以概述位,对于一个规模为n的问题,如果规模较大,而且可以将其分解为k个规模较小的字问题,那么就递归的解这些字问题,然后将各个子问题合并得到愿问题的解
整个算法可以分为 分解,解决,合并 三个流程
分治法的实现简单可以如下的看
不断的向下递归,得到最小化的结果,然后向上合并,得到结果
其次是二分查找法,也是分治法的实现
然后是回溯法
一种深度优先的查找方法,按照当前条件,选择一个相对较优的条件向前搜索,从而达到目标。如果达不到目标,就会退回一步重新选择,这就是回溯法
关于贪心法
总是在做当前来说较好的选择,并不是从整体选择,每次都是寻求局部最优解,所以消耗时间少,但是一般只能找到相对最优解
需要注意对于贪心的问题,需要明确一个物品只能插入一次还是可以插入多次
动态规划法
需要根据某些判断,或者某些函数,确定每一步走下来都能得到最优解,从而得到全局最优解
我们来看道例题
首先是代码题
在最先适宜策略中,我们先将其进行了初始化,为0
然后遍历n个货物
每个货物依次遍历每个集装箱,判断是否可以进行装载
所以第一个应该是
J = 0
第二个应该是
B[J] = B[J] + S[I]
然后是第二个最优策略
则是先初始化多个集装箱爱你
然后依次遍历货物
依次找到最优的集装箱
所以第三个应该是为
Min = temp
B[M] = B[M] + S[I]
其次是第二题
分别是使用了贪心以及贪心算法
然后关于时间复杂度,则是取其中最大的复杂度,则双双为 o(n的平方)
最后是问题三
然后是第二道题
对于第一道题
我们分别填充四个位置
k<= r
Arr[k] = right[j]
Begin < end
mergerSort(arr,mid,end)
对于第二个题,需要我们知道算法设计策略
这本质上就是一种分治法的思想
递归式应该是,Tn = 2T(n/2)
也就是o(nlogn)
空间复杂度则是o(n)
比较次数,如果是已经排序号的子数组,那么则应该是
N1 + n2的比较次数