试题详情
- 简答题给定线性序集中n个元素和一个整数k,1≤k≤n,要求找出这n个元素中第k小的元素,请设计一个最坏时间复杂度为O(n)的算法,并对其时间复杂度进行分析说明。
-
我们把这种算法叫做快速选择(quickselect)。令〡Si〡为Si中元素的个数,快速选择的步骤如下:
1)如果〡S〡=1,那么k=1并将S中的元素作为答案返回。如果正在使用小数组的截止方法且〡S〡≤CUTOFF,则将S排序并返回第k个最小元。
2)选取一个枢纽元v∈S。
3)将集合S-{v}分割成S1和S2,就像快速排序中所做的那样。
4)如果k≤〡S1〡,那么第K个最小元必然在S1中。在这种情况下,返回quickselect(S1,k),如果k=1+〡S1〡
,那么枢纽元就是第k个最小元,将它最为答案返回。否则,第k个最小元就在S2中,他是S2中的第(k-〡S1〡-1)个最小元。我们进行一次递归调用并返回quickselect(S2,k-〡S1〡-1)。
与快速排序对比,快速选择只进行了一次递归调用而不是两次。快速选择的最坏情形和快速排序的相同,也就是O(N=2)。直观看来,这是因为快速排序的最坏情形发生在S1和S2有一个是空的时候;于是,快速选择也就不是真的节省一次递归调用。不过平均运行时间是O(N)。具体分析类似快速排序的分析。
快速排序的实现甚至比抽象描述还要简单,当算法终止时,第k个最小元就在位置k-1上(因为数组开始于下标0)。这破坏了原来的排序;如果不希望这样,那么需要做一份拷贝。 关注下方微信公众号,在线模考后查看
热门试题
- 递归函数一般情况下一定会议递归出口,否则
- 修公路问题算法:则填空处可以填写()
- 数据结构与算法里,设fun(n)表示斐波
- 数据结构与算法里,快速排序在()情况下,
- 以下是计算xm的值
- 有4个矩阵{A1,
- 对于如下描述的背包问题,请计算最终装入
- 请列举几个常见的NP完全问题。
- 冒泡排序按照各种分类可以是()。
- FIFO是()的一搜索方式。
- 数据结构与算法里,程序的输出结果不可能是
- 该程序输出的图形是()
- 数据结构中,折半查找需要记录是链式存储并
- 排序只有内排序没有外排序。
- 建立计算模型的目的是为了使()。
- 负载因子(装填因子)是哈希表的一个重要参
- 在下列算法中得到的解未必正确的是()。
- 数据结构中,查找表是图形结构。
- 1-10000以内的完数之和为()
- 大整数乘法算法是()算法。