请分别计算3个元素一组和7个元素一组的第k小算法的递推方程和算法复杂度,详细步骤
时间: 2024-05-20 16:12:04 浏览: 93
1. 3个元素一组的第k小算法
递推方程:
设待求的第k小的数为x,将原数组按照3个一组分组后,共有n/3组,记为G1, G2, ..., G(n/3),每组内部有3个元素,记为a1, a2, a3。则有:
- 将每组内的元素从小到大排序,得到b1, b2, b3。
- 取每组的中位数,得到数组M,即M[1]=b1[2], M[2]=b2[2], ..., M[n/3]=b(n/3)[2]。
- 在数组M中递归地求第(n/3+1)/2小的数,设为y。
- 根据y将原数组分为小于y的一部分S1和大于等于y的一部分S2。
- 如果k<=|S1|,则在S1中递归地求第k小的数。
- 如果k=|S1|+1,则返回y。
- 如果k>|S1|+1,则在S2中递归地求第k-|S1|-1小的数。
算法复杂度:
每次将n个元素分为n/3组,每组内部排序的时间复杂度为O(1),递归次数为log3/2n,每次递归的时间复杂度为O(n),所以总的时间复杂度为O(nlog3/2n)。
2. 7个元素一组的第k小算法
递推方程:
设待求的第k小的数为x,将原数组按照7个一组分组后,共有n/7组,记为G1, G2, ..., G(n/7),每组内部有7个元素,记为a1, a2, ..., a7。则有:
- 将每组内的元素从小到大排序,得到b1, b2, ..., b7。
- 取每组的中位数,得到数组M,即M[1]=b1[4], M[2]=b2[4], ..., M[n/7]=b(n/7)[4]。
- 在数组M中递归地求第(n/7+1)/2小的数,设为y。
- 根据y将原数组分为小于y的一部分S1和大于等于y的一部分S2。
- 如果k<=|S1|,则在S1中递归地求第k小的数。
- 如果k=|S1|+1,则返回y。
- 如果k>|S1|+1,则在S2中递归地求第k-|S1|-1小的数。
算法复杂度:
每次将n个元素分为n/7组,每组内部排序的时间复杂度为O(1),递归次数为log7/2n,每次递归的时间复杂度为O(n),所以总的时间复杂度为O(nlog7/2n)。
阅读全文