算法设计与分析第二章

一丶用自然语言描述找第k小的数的分治算法

1.选择基准:从数组中随机选择一个元素作为基准(pivot)。

2.划分数组:通过一趟排序将待排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据要小,然后再按此方法对这两部分数据分别进行快速选择,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

3.递归查找

如果基准的位置恰好是第k个位置,则返回基准。

如果基准的位置大于k,说明第k小的元素在基准的左侧,因此在左侧子数组中继续查找第k小的元素。

如果基准的位置小于k,说明第k小的元素在基准的右侧(但需要考虑基准本身已经占据了一个位置),因此在右侧子数组中查找第(k-基准位置-1)(注意调整索引)小的元素。

二丶分析时间复杂度

最好时间复杂度:O(n)。当每次选择的基准都能将数组均匀地划分为两部分时,递归的深度为logn,每层需要遍历整个数组,因此总的时间复杂度为O(nlogn)。但由于我们是在找第k小的元素,而不是对整个数组进行排序,所以实际上当我们找到第k小的元素时就可以停止递归,因此最好情况下时间复杂度可以降低到O(n)。

最坏时间复杂度:O(n2)。

三丶对分治法的体会和思考

1.递归与迭代

分治法通常使用递归来实现,但也可以使用迭代。递归版本更直观,易于理解,但可能导致栈溢出或性能问题,特别是在处理大数据集时。迭代版本可能更复杂,但可以避免这些问题。

选择递归或迭代时,需要考虑问题的规模、系统的栈空间限制以及性能要求。

2.适用场景

分治法适用于具有递归性质的问题,如排序(快速排序、归并排序)、搜索(二分搜索)、图论问题(如最短路径、最小生成树)等。

它也适用于可以分解为独立子问题的场景,这些子问题可以并行处理,从而提高效率。

3.随机性与确定性

分治法可以结合随机性来提高性能。例如,在快速排序中,通过随机选择基准元素来减少最坏情况的发生概率。

然而,在某些场景中,确定性可能更为重要。例如,在并行计算中,为了确保结果的一致性,可能需要使用确定性的划分策略。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值