huxiaoqinggdufs

导航

 

1.请用自然语言或伪代码描述找第k小的数的分治算法
①划分:找一个元素作为基准元素;小于基准元素的记作left,长度为len_left;所有大于等于基准的元素记作right,长度记为len_right。
②子问题选择(递归):比较k与len_left的大小,确定第 k 小元素所在的区间。若k ≤ len_left:第 k 小元素在左区间中,递归对left执行相同的找第 k 小元素操作;若k = len_left + 1:基准元素就是第 k 小元素,直接返回基准元素;若k > len_left+ 1:第 k 小元素在右区间 R 中,此时需找right中的第k - len_left - 1小元素(因为left和基准已占据len_left+1个更小的元素),递归right执行该操作。
③终止条件:当待处理的子区间长度为 1 时(即只有一个元素),该元素就是目标(此时 k 必然为 1),直接返回。
2.分析该算法的最好时间复杂度和最坏时间复杂度
最好时间复杂度(每次都能划分为近似相等的两部分):T(n)=T(n/2)+O(n)=O(n)
最坏时间复杂度(每次基准元素都是最大或者最小元素,一部分大小为n-1,一部分为0):T(n)=T(n-1)+O(n)=O(n^2)
3.结合本章的学习,谈谈你对分治法的体会和思考
分治法通过选择一个 基准元素 将原问题拆解为规模更小的子问题,递归求解子问题后直接得到原问题答案。通过分治法可以把复杂的问题通过若干子问题来提高效率,但分治法的效率主要取决于划分是否平均。如果划分不均,可以尝试其他方法。

posted on 2025-10-26 09:27  胡晓青  阅读(11)  评论(0)    收藏  举报