算法导论第九章 第K顺序统计量

简介: 1.第K顺序统计量概念   在一个由n个元素组成的集合中,第k个顺序统计量是该集合中第k小的元素。例如,最小值是第1顺序统计量,最大值是第n顺序统计量。 2.求Top K元素与求第K顺序统计量不同   Top K元素:是指求数组中的最大(或者最小的)K个元素,一般K比较小,采用最大(或者最小)堆实现。

1.第K顺序统计量概念

  在一个由n个元素组成的集合中,第k个顺序统计量是该集合中第k小的元素。例如,最小值是第1顺序统计量,最大值是第n顺序统计量。

2.求Top K元素与求第K顺序统计量不同

  Top K元素:是指求数组中的最大(或者最小的)K个元素,一般K比较小,采用最大(或者最小)堆实现。之前写过的一篇有关文章是:

海量数据处理的 Top K算法(问题) 小顶堆实现

  第K顺序统计量:只求解数组中的第K大元素,是求解一个元素。一般使用“快速排序”的思想,将数组划分求解。

3.第K顺序统计量求解代码

  这是求解第K统计量代码,即第k小。如果要求第K大,可以根据数组长度转化为第n-k小。

public class TheK {
    int array[]={12,435,123,1,345,546,12,546,7,86,354,7};
    int paarray(int i,int j)
    {
        int pivot=array[i]; //用区间的第1个记录作为基准
        while(i<j)
        {     //从区间两端交替向中间扫描,直至i=j为止
            while(i<j&&array[j]>=pivot) //pivot相当于在位置i上
                   j--; 
            if(i<j)
                   array[i++]=array[j]; //相当于交换array[i]和array[j],交换后i指针加1
            while(i<j&&array[i]<=pivot) //pivot相当于在位置j上
                   i++;
            if(i<j)
                    array[j--]=array[i]; //相当于交换array[i]和array[j],交换后j指针减1
        }
        array[i]=pivot; //基准记录已被最后定位
        return i;
    }
    
    void getK(int k)
    {
        int mid=paarray(0,array.length-1);
        while(mid!=k)
        {
            if(mid<k)
                mid=paarray(mid+1,array.length-1);
            else
                mid=paarray(0,mid-1);
        }
        System.out.println("The num of "+k+" is:"+array[k]);
    }
    
    public static void main(String args[]){
        //查找第6个元素。数组元素编号从0开始
        new TheK().getK(6);
    }
}

 

相关文章
|
6月前
|
存储 人工智能 算法
【AcWing算法基础课】第四章 数学知识(未完待续)(3)
根据下面公式来预处理出等式右边的组合数的值,那么等式左边就可以用等式右边已经算过的值来进行计算(有点像dp)。
58 0
|
6月前
|
人工智能 算法 BI
【AcWing算法基础课】第四章 数学知识(未完待续)(2)
从2到n枚举每个数,删掉其所有的倍数,枚举完之后,没有被删掉的数为质数。
50 0
|
6月前
|
人工智能 算法
【AcWing算法基础课】第四章 数学知识(未完待续)(1)
利用秦九韶算法来实现其他进制转十进制的结果求解
51 0
|
9月前
|
算法
算法导论(第三版)具体算法解析与理解
算法导论(第三版)具体算法解析与理解
|
算法
算法基础课第六章。解决一些问题。(一)
算法基础课第六章。解决一些问题。(一)
74 0
|
算法
算法基础课第六章。解决一些问题。(二)
算法基础课第六章。解决一些问题。(二)
47 0
|
存储 移动开发 算法
数据结构与算法——第五节 树和堆
其按照我们想要的方式排列了出来。由于我们在向下调整算法里的if给的是 a[child + 1] &gt; a[child]和a[child] &gt; a[parent]才交换,那么我们得到的就是一个大堆。
201 0
数据结构与算法——第五节 树和堆
|
存储 算法 搜索推荐
软考——软件设计师:第四章:数据结构&算法分析与设计考点总结(完整篇)(下)
软考——软件设计师:第四章:数据结构&算法分析与设计考点总结(完整篇)(下)
软考——软件设计师:第四章:数据结构&算法分析与设计考点总结(完整篇)(下)
|
存储 机器学习/深度学习 人工智能
软考——软件设计师:第四章:数据结构&算法分析与设计考点总结(完整篇)(上)
软考——软件设计师:第四章:数据结构&算法分析与设计考点总结(完整篇)(上)
软考——软件设计师:第四章:数据结构&算法分析与设计考点总结(完整篇)(上)