第二章分治法

1.找第k小元素的分治算法描述:
从给定数组中要找其中第k小的元素,先判断,如果只剩一个元素(low == high),直接返回结果。再选取一个基准mid,把数组划分为两部分:左半部分所有元素小于mid,右半部分所有元素大于mid,记mid划分后的最终下标为pos,再比较当前位置的顺序和k的大小:
如果 pos - low + 1 == k:说明mid就是第k小元素,直接返回arr[pos]
如果 pos - low + 1 > k:说明目标在左半区间,递归在左半区间中找第k小的元素
如果 pos - low + 1 < k:说明目标在右半区间,递归在右半区间中找第k小的元素
2.时间复杂度的分析:
每次划分都能把数组恰好平分为两半,每次问题规模减半,总时间为递推式 T(n) = T(n/2) + O(n)(划分耗时O(n)),根据主定理得结果为 O(n)。
3. 对分治法的体会和思考
分治法的核心是分而治之:把一个复杂的大问题拆分成若干个规模更小、性质相同的小问题,解决小问题后再合并得到原问题的解,典型步骤是「分解→求解子问题→合并」。
适用场景:问题具备最优子结构、子问题之间相互独立。
优势:分治可以把复杂度降到O(nlogn)。像找第k小的问题,暴力排序是O(nlogn),分治优化后可以做到O(n),避免了不必要的全排序计算。平衡是关键:分解的时候尽量让子问题规模均匀,才能获得最优复杂度。

posted @ 2026-10-11 23:51  zwx0524  阅读(2)  评论(0)    收藏  举报