第二章作业
1、首先通过划分函数将数组分成左右两部分,左边元素全部小于基准值,右边元素全部大于等于基准值,就得到基准元素的位置。根据基准位置可以判断出它是当前区间的第几小元素,如果正好是第 k 小,直接返回结果;如果大于 k,说明目标在左侧区间,继续递归在左区间查找;如果小于 k,则在右侧区间继续查找,不断缩小范围直至找到答案。
2、最好时间复杂度为 O (n),此时每次划分都能将数组均匀分割,每次只需处理一半数据,整体遍历次数是线性的。最坏时间复杂度为 O (n^2),当数组本身有序或基本有序时,每次划分只能剔除一个元素,递归深度达到 n,需要多次遍历数组,时间效率大幅下降。
3、通过本章学习,我认为分治法的核心就是把复杂的大问题拆成结构相同、规模更小的子问题,逐个求解后得到原问题的解。分治法能够有效减少重复运算、提升效率。同时我也认识到,分治算法的效率由划分方式决定,合理的划分可以极大优化时间复杂度,这也让我对算法优化的思路有了更清晰的理解。

浙公网安备 33010602011771号