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


    【笔记】

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

    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


  • 相关阅读:
    [工作后学习]解决回家之后不想看书的问题
    [M$]重装或更换主板后提示“由于指定产品密钥激活次数“ office 2016
    [linux]查询当前目录大小 du -h --max-depth=1
    【Qt学习笔记】12_MyAction自定义类
    【Qt学习笔记】11_MainWindow2
    Ubuntu18.04 搜狗输入法乱码
    【Qt学习笔记】10_MainWindow
    【Qt学习笔记】09_用户登陆界面
    【Qt学习笔记】08_布局管理
    【Qt学习笔记】07_滑块组件
  • 原文地址:https://www.cnblogs.com/cyendra/p/3681616.html
Copyright © 2020-2023  润新知