算法第二次作业
1.找第k小数的分治算法
首先先划分,用快速排序方法,分为三部分。找出基准元素,左子问题都小于基准,右子问题都大于等于基准,返回基准元素下标index,这样我们就能知道每一次排序里的基准元素是第几小的数。
比较index+1和k,若相同,基准元素就是第 k 小数,直接返回;若k<index+1,则第k小数在左子问题中,递归求解左子问题的第k小数;若k》index+1,则第k小数在右子问题中,递归求解右子问题的第k小数。
2.该算法的最好时间复杂度和最坏时间复杂度
最好时间复杂度:O (n) 基准恰好是当前数组的 “中间值”,只用递归一次。
最坏时间复杂度:O (n²) 基准是当前数组的 “最值”(如最小数或最大数),一个子数组为空,另一个子数组长度仅比原数组少1。
3.对分治法的体会与思考
分治法的核心是将原问题拆解为多个独立的子问题,求解子问题后合并结果。均衡的划分能让问题规模极大地减小,不均衡的划分也会让问题规模减小,但只是线性缩小。
浙公网安备 33010602011771号