首页 > 其他 > 详细

中位数和顺序统计,以线性期望时间做选择

时间:2014-05-30 01:57:08      阅读:400      评论:0      收藏:0      [点我收藏+]

找出一个数组的最大值和最小值是比较容易的,我们只需遍历一次数组即可。但是寻找一个数组的第i小或者第i大,就需要一些技巧使得查找的时间尽可能小。随机化划分选择算法是一个时间复杂度为O(n)的算法。

bubuko.com,布布扣
int fIndmax(int a[],int p,int r,int i)
{
    if(p==r)
        return a[p];
    int q = RandPartition(a, p, r); // A[q]作为主元将A[p...r]进行划分。
    int k = q - p + 1;           //假设k是要查找的第i小的元素
    if(i==k)                        //如果K=i则主元就是目标元素,如果i<k,则递归地求解左边的序列,如果i>k则递归求解右边的序列
        return a[q];
    else if(i<k)
    {
        return fIndmax(a, p, q-1, i);
    }
    else
        return fIndmax(a, q+1, r, i-k);
}
bubuko.com,布布扣

这个算法的缺点是:如果一个数组中又重复元素,那么得到的结果不是我们期望的结果。解决方法是先删除数组中重复的元素,再利用本算法。 应该还有更好地方法!

中位数和顺序统计,以线性期望时间做选择,布布扣,bubuko.com

中位数和顺序统计,以线性期望时间做选择

原文:http://www.cnblogs.com/cliviazhou/p/3757929.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!