算法分析与设计实验报告 Project6

实验报告
课程名称
学生姓名
实验名称
实验地点
1.
给定N个数,求其中第K小的数
2.
如果使用快速排序或者其他高效的排序算法,可以在O(nlogn)的时间下轻松得出第k小
考虑如何改进快速排序来减小复杂度,我们发现快排中,划分实际上是从数组a[l - r]中选取一个主元,使l到x的所有元素小于等于x,x到r的所有元素大于等于x,这样就能确定x的最终位置
也就是说每划分一次就能确定这个主元的最终位置,于是试图去构造第k个位置
所以只需要某次划分的q为第k个小标的时候,其实就已经找到了答案,而其左右是否有序不用考虑
于是划分时如果q = k就返回a[q],如果q比目标下标小,就递归右区间,否则递归左区间即可
3.
QUCIK_SELECT(L,R,K)
4.
类似快速排序的分析方法,可以知道上述算法最坏情况是O(n^2)的。而该算法的平均性能比较好,又因为是随机化的,因此不存在哪种输入会导致最坏情况发生,通过分析该函数的期望运行时间E[T(n)]=O(n),得出,在期望的线性时间内,我们可以找到任一顺序统计量,特别是中位数。
5.
Algorithm-Class-codes/project6 at main · MQFLLY/Algorithm-Class-codes (github.com)
上一篇:05-树9 Huffman Codes (30 分)


下一篇:算法分析与设计实验报告 Project5