liusichen66  

1.找第k小的数的分治算法
(1)取最左端元素为基准元素,遍历数组元素,将小于基准元素的元素放到基准元素左边,大于基准元素的放到其右边
(2)判断基准数的排名和k的关系,如果小于K,则在基准元素左半部分递归查找,大于K,则在右半部分递归查找,等于K则要找的数为基准元素

2.分析该算法的最好时间复杂度和最坏时间复杂度
(1)最好情况O(n):每次挑的基准刚好就是第k小的数,也就是每次划分的基准数都很合适,能把数组均匀分成左右两部分。不用再递归,只花一次遍历划分的时间。
(2)最坏情况O(n²):每次都挑到最大或最小的当基准,数组每次只少一个元素,得递归n次,总时间就变成平方级了。

3.对分治法的体会和思考
分治法为我提供了一种新的解决问题的方式,不需要我们遍历全部。分治法的核心就是拆分、求解、合并,把一个复杂的大规模问题,拆解成多个结构相同、规模更小的子问题,解决完子问题后,就能推出原问题的答案。而且我发现分治算法的逻辑性很强,代码结构清晰,大多可以用递归实现。子问题和原问题的解题思路完全一致,只是数据规模更小,不用重复编写不同的逻辑,代码简洁且容易理解。我也认识到分治法并不是完美的,它的效率高度依赖拆分的方式,如果拆分不均匀,就会出现最坏时间复杂度,效率大幅下降,需要根据实际场景选择合适的实现方式。总的来说,分治法是一种非常巧妙的解题思想。

posted on 2026-10-09 17:14  liusichen66  阅读(3)  评论(0)    收藏  举报