算法导论 9.3-6 k分位数
来源:互联网 发布:js搅拌机型号 编辑:程序博客网 时间:2024/05/01 08:46
1.第三版的算法导论上面的翻译感觉略有问题,“k分位数是指 能把有序集合分成k个等大小集合的第k-1个顺序统计量”。 觉得应该改为, “k分位数是指 能把有序集合分成k个等大小集合的k-1个顺序统计量”。
2.寻找k分位数,利用二分思想,寻找k分位数,首先找其中的第k/2分位点,一次递归寻找需要的点。、
#include <iostream>#include <cstdlib>#include <cstdio>#include <ctime>#include <algorithm>using namespace std;int* createarray(int);void myswap(int*A,int p,int q);void print(int*,int,int);int random_select(int*,int,int,int);int random_partition(int*A,int,int);int mypartition(int*,int,int);int *kth_qua(int *A,int p,int r,int k,int *,int t);int main (){ int *A = createarray(16); // srand(time(NULL)); print(A,0,16); int k = 4; int *B = new int[4]; kth_qua(A,0,15,4,B,4); print(B,0,4); sort(A,A+16); print(A,0,16);}int* createarray(int n){ int *aret = new int[n]; srand(time(NULL)); for (int i = 0;i < n;i ++) { *(aret+i) = rand()%1024; } return aret;}void myswap(int *A,int p,int q){ int temp = A[p]; A[p] = A[q]; A[q] = temp; return;}void print(int *A,int p,int q){ for (int i = p;i < q;i ++) { cout << A[i] << '\t' ; } cout << "\n----------------endl\n";}int mypartition(int*A,int p,int r){ int i = p -1; int j = p; int key = A[r]; for (j = p;j <=r-1; j ++) { if (A[j] < key) { i ++; myswap(A,i,j); } } i ++; myswap(A,i,r); return i;}int random_partition(int *A,int p,int r){ int i = rand()%(r-p+1) + p; // cout << "e " << p << ' ' << r << ' '<< endl; myswap(A,i,r); return mypartition(A,p,r);}int random_select(int *A,int p,int r,int k){ int q = random_partition(A,p,r); cout << "rr " << p <<' '<< r <<' '<< k << endl; int i = p,j = 0; int t = q-i+1; while (t != k) { // cout << "dsa " << k << ' ' << t <<' '<< q << ' ' <<i << ' ' << j <<endl; if (t < k) { i = q +1; k = k-t; } else { j = q-1; } q = random_partition(A,i,j); t =q-i+1; } return q;}int *kth_qua(int *A,int p,int r,int k,int *B,int t){ if ((r-p+1) <= t) { return 0; } int sub_k = (r-p+1)/t; int mid_k = sub_k/2; int dmin_k = mid_k*t; int s = random_select(A,p,r,dmin_k); // cout <<"s " << s << endl; // print(A,0,16); //cout << "dsad " << p << ' ' << r <<' ' <<s <<endl; B[s/t] = A[s]; kth_qua(A,p,s,k,B,t); kth_qua(A,s+1,r,k,B,t);}
0 0
- 算法导论 9.3-6 k分位数
- 算法导论 9.3-6 nlgk时间求k分位数
- 算法导论第九章9.3.6----k分位数
- 9.3-6 k分位数
- 【算法导论学习-017】k分位数(the Kth quantiles)
- 关于k分位数
- k分位数
- (p124)k分位数
- 关于k分位数 收藏
- 算法导论9.3-6
- c++实现"四分位数"算法1
- c++实现"四分位数"算法2
- 算法导论 练习题 9.3-6
- 分位数
- 算法导论之中位数和顺序统计量(1)
- 算法导论之中位数与顺序统计量(2)
- 算法导论之中位数和顺序统计量(3)
- 求k分位数的k-1个顺序统计量
- Windows移动开发(一)——登堂入室
- HDU4520-小Q系列故事——最佳裁判
- http响应Last-Modified和ETag以及Apache和Nginx中的配置
- 基于OpenCV读取摄像头进行人脸检测和人脸识别
- 设置Editplus3.6中的字体大小
- 算法导论 9.3-6 k分位数
- MacBook Pro 安装 FusionDrive
- HTTP头信息中的参数Etag
- Qt在mini2440下的触摸屏失效和库文件找不到问题的解决
- Google服务器架构图解简析
- warning: right shift count >= width of type
- 大型高并发高负载网站的系统架构
- 多边形问题( 判断一个点在不在多边形内)
- opencv 卡尔曼滤波器例子,自己修改过