摘要:
题目:给出一个O(n)时间的算法,在给定一个有n个不同数字的集合S以及一个正整数k<=n后,它能确定出S中最接近其中位数的k个数思考:step1:求出数组的中位数的值O(n)step2:计算数组每个数与中位数差的绝对值,存于另一个数组B中O(n)step3:求出数组B中第k小的数ret O(n)step4:计算数组S中与ret差的绝对值小于ret的数并输出O(n)其中,step4也可以通过划分的方法找出数组S中与ret差的绝对值小于ret的数代码: 1 #include <iostream> 2 using namespace std; 3 4 int length_A; 5 阅读全文
摘要:
题目:对一个含有n个元素的集合来说,所谓k分位数(the kth quantile),就是能把已排序的集合分成k个大小相等的集合的k-1个顺序统计量。给出一个能列出某一集合的k分位数的O(nlgk)时间的算法思考:令每个子集合的元素个数为t = n / k,A[j]是数组A中下标为j的元素,A(j)是数组是第j大的元素则所求的k分位数是指A(t),A(2t),A(3t),……,A((k-1)t)按顺序依次求这k-1个数的运行时(k-1)*n要使运行时间为O(nlgk),改进方法是不要依次寻找这k-1个数,而是借用二分的方法来找。先找第k/2个分位数,再以这个分位数为主元把数组分为两段,分别对这 阅读全文