第二次作业
-
自然语言描述寻找数组中第k小元素的分治算法:
如果数组只有一个元素,直接返回该元素
从数组中随机选择一个元素作为基准
将数组分成三部分:小于基准的元素、等于基准的元素、大于基准的元素,再统计这三部分的大小
如果k ≤ 小于基准的元素数量,在小于基准的部分递归查找第k小元素,如果k > 小于基准的元素数量 + 等于基准的元素数量,在大于基准的部分递归查找第(k - 小于基准数量 - 等于基准数量)小元素,否则,基准就是第k小元素,直接返回 -
时间复杂度分析
最好情况时间复杂度:递推关系:T(n) = T(n/2) + O(n),最好情况时间复杂度为:O(n)
最坏情况时间复杂度:递推关系:T(n) = T(n-1) + O(n),最坏情况时间复杂度为:O(n²) -
对分治法的体会和思考
通过本章学习,我对分治法有了更深刻的理解:分治法将复杂问题分解为若干个相同或相似的子问题,递归解决这些子问题,再合并子问题的解得到原问题的解。
分治法可以将问题简化,将大规模问题转化为小规模问题,降低了解题难度,而且子问题通常相互独立,适合并行计算。
分治法不仅是一种算法设计技术,更是一种解决问题的思维方式。在面对复杂问题时,我会先考虑是否能将其分解为更小的子问题,这种思维模式在编程和系统设计中都具有重要价值。同时,我也认识到分治法不是万能的,需要根据具体问题特点选择合适的算法策略。
浙公网安备 33010602011771号