zoukankan      html  css  js  c++  java
  • 《算法导论》笔记 第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


  • 相关阅读:
    iOS 调试心得
    一步一步带你安装史上最难安装的 vim 插件
    20 行代码极速为 App 加上聊天功能
    在通知栏上玩游戏,Steve iOS 游戏实现思路
    ThinkPHP 3.2.x 集成极光推送指北
    MkDocs 文档生成逻辑浅析
    极光推送的角标问题
    聊天界面-自适应文字
    Python3.7源码包编译安装
    Navicat远程连接MySQL数据库
  • 原文地址:https://www.cnblogs.com/cyendra/p/3681616.html
Copyright © 2011-2022 走看看