《算法导论》笔记 第9章 9.2以期望线性时间做选择

来源:互联网 发布:神武挖山水算法 编辑:程序博客网 时间:2024/04/27 14:23

【笔记】

在平均情况下,任何顺序统计(特别是中位数),都可以在线性时间内得到。

int partition(int A[],int p,int r) {    int x = A[r];    int i = p-1;    for (int j=p;j<r;j++) {        if (A[j] <= x) {            i++;            swap(A[i],A[j]);        }    }    swap(A[i+1],A[r]);    return i+1;}int randomizedPartition(int A[],int p,int r) {    int i = rand() % (r-p+1) + p;    swap(A[r],A[i]);    return partition(A,p,r);}int randomizedSelect(int A[],int p,int r,int i) {    if (p==r) return A[p];    int q = randomizedPartition(A,p,r);    int k = q-p+1;    if (i==k) return A[q];    else if (i<k) return randomizedSelect(A,p,q-1,i);    else return randomizedSelect(A,q+1,r,i-k);}


【习题】

9.2-1 证明:在RANDOMIZED-SELECT中,对长度为0的数组,不会进行递归调用。

情景1:当r=p时,直接返回A[p],不会出现长度为0的数组。

情景2:当r-p=1时,q=p或r。当q=p时此时答案要么在A[q]处,要么在A[r],当i=k时,返回A[q],否则对区间(q+1,r)递归,出现情景1。q=r时同理。

情景3:当r>p+1时,若q在边界处,即q=r或q=p,若答案在A[q]处,转到情景1。否则转到情景3或情景2。

因此递归过程中不会出现长度为0的数组。


9.2-2 证明:指示器随机变量Xk和T(max(k-1,n-k))是独立的。


9.2-3 写出RANDOMIZED-SELECT的一个迭代版本。

int NonRecursiveRandomizedSelect(int A[],int p,int r,int i) {    while (p<r) {        int q = randomizedPartition(A,p,r);        int k = q-p+1;        if (i==k) return A[q];        else if (i<k) r = q-1;        else {            p = q+1;            i -= k;        }    }    return A[p];}

9.2-4 假设要用RANDOMIZED-SELECT 来选择数组 A=<3,2,9,0,7,5,4,8,6,1>中的最小元素。给出在RANDOMIZED-SELECT的最坏情况性能下的一个划分序列。

9、8、7、6、5、4、3、2、1、0 orz


0 0