第二章作业
一、找第k小的数的分治算法的自然语言描述:
1、选择数组中一个数作为基准pivot,提取出来存储在额外的空间
2、建立两个指针low,high分别指向数组开头和末尾元素
3、从右向左搜索直至出现小于pivot的数
4、调换low,high指针指向的内容
5、从左向右搜索直至出现大于pivot的数
6、同4
7、如果low<high,从第3步开始重复执行
8、基准pivot替换low指针指向的内容
9、获取pivot在数组中的位置p,如果p=k,则找到最终答案
如果p小于k,则将low调整为p+1,如果p大于k,将high调整为p-1。从第3步开始重复执行
二、时间复杂度分析
最好情况:pivot将数组分为两半,递推式T(n)=T(n/2)+O(n),主定理得复杂度O(n)
最坏情况:pivot选择数组两端元素,递推式T(n)=T(n-1)+O(n)=O(n^2)
三、对分治法的体会和思考
分治法通过将大问题连续分解成几个易于解决的小问题直至易于求解为止,善用分治法可以简化程序设计思路和解决复杂问题
但是分治法本身所隐含的递归结构使得直接使用分治法产生的算法运行时间长于迭代算法

浙公网安备 33010602011771号