顺序统计量

在一个n个元素组成的集合中,第i个顺序统计量是该集合中第i小的元素。

使用选择算法,可以在Θ(n)时间内找到第i个顺序统计量

  1. 对序列A进行划分,使得[s...p-1] < [p] < [p+1...e]
  2. 如果p==i,则返回A[p]
  3. 如果p>i,对[s...p-1]重新划分,反之对[p+1...e]重新划分
private static int Select(List<int> sq, int s, int e, int i)
{
    //如果s=e了,说明找到了
    if (s >= e)
        return sq[s];
    //划分
    int q = Partition(sq, s, e);
    //找到了
    if (q == i - 1)
        return sq[q];
    //前半部分找
    else if (q > i - 1)
    {
        return Select(sq, s, q - 1, i);
    }
    //后半部分找
    else
    {
        return Select(sq, q + 1, e, i);
    }
}
时间: 2024-10-04 00:57:15

顺序统计量的相关文章

算法导论 中位数和顺序统计量(python)

第i个顺序统计量:该集合中第i小的元素(建集合排序后第i位 当然算法可以不排序) 中位数:集合中的中点元素 下中位数 上中位数 9.1最大值和最小值 单独的max或min每个都要扫一遍 n-1次比较 如果同时找max和min 要 :1.2个数相互比较 1次{每次选出2个 选n//2次} 2.大的和max比较 3.小的和min比较 找出序列为第i小的数Θ(n) 随机快速排序的运用:(可以回去看快排) 代码: import random def PARTTION(A,p,r): x = A[r] i

算法导论第九章中位数和顺序统计量(选择问题)

本章如果要归结成一个问题的话,可以归结为选择问题,比如要从一堆数中选择最大的数,或最小的数,或第几小/大的数等, 这样的问题看似很简单,似乎没有什么可研究的必要,因为我们已经知道了排序算法,运用排序+索引的方式不就轻松搞定了?但细想,排序所带来的时间复杂度是不是让这个问题无形之中变得糟糕.那算法研究不就是要尽可能避免一个问题高复杂度地解决,让那些不敢肯定有无最优解的问题变得不再怀疑,这也是算法研究者所追求的一种极致哲学.既然排序让这个问题解决的性能无法确定,那我们就抛开排序,独立研究问题本身,看

9.中位数与顺序统计量

摘要: 本章所讨论的问题是在一个由n个不同数值构成的集合中选择第i个顺序统计量问题.主要讲的内容是如何在线性时间内O(n)时间内在集合S中选择第i小的元素,最基本的是选择集合的最大值和最小值.一般情况下选择的元素是随机的,最大值和最小值是特殊情况,书中重点介绍了如何采用分治算法来实现选择第i小的元素,并借助中位数进行优化处理,保证最坏保证运行时间是线性的O(n). 1.基本概念 顺序统计量:在一个由n个元素组成的集合中,第i个顺序统计量是值该集合中第i小的元素.例如最小值是第1个顺序统计量,最大

概率统计中的样本矩和顺序统计量

1.样本k阶(原点)矩 2.样本k阶中心矩 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2FuZ2hhbzEwOQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" > 3.顺序统计量

第九章 中位数和顺序统计量 9.2 期望为线性时间的选择算法

package chap09_Medians_and_Order_Statistics; import static org.junit.Assert.*; import java.util.Random; import org.junit.Test; public class SearchAlorithms { /** * 分割(快速排序中对数组的分割) * * @param n * @param start * @param end * @return */ protected static

顺序统计量(选择问题)

定义 在一个由n个元素组成的集合中,第i个顺序统计量是该集合中第i小的元素,例如,在一个元素集合中,最小值是第一个顺序统计量(i = 1),最大值是第n个顺序统计量(i = n). 查找最小值 在一个有n个元素的集合中,需要做多少次比较才能确定其最小元素呢?一个简单的思路就是:依次遍历集合中的每个元素,并记录当前最小的元素,在下面的排序中,假设该集合元素存放在数组A中,且A.length = n. MINIMUM(A) min = A[1] for i = 2 to A.length if mi

算法导论之七(中位数和顺序统计量之选择算法)

实际生活中,我们经常会遇到这类问题:在一个集合,谁是最大的元素?谁是最小的元素?或者谁是第二小的元素?....等等.那么如何在较短的时间内解决这类问题,就是本文要阐述的. 先来熟悉几个概念: 1.顺序统计量: 在一个由n个元素组成的集合中,第i个顺序统计量(order statistic)是该集合中第i小的元素.最小值是第1个顺序统计量(i=1),最大值是第n个顺序统计量(i=n).   2.中位数: 一个中位数是它所属集合的"中点元素",当n为奇数时,中位数是唯一的,位于i=(n+1

【算法导论】学习笔记——第9章 中位数和顺序统计量

在一个由n个元素组成的集合中,第i个顺序统计量(order statistic)是该集合中第i小的元素.用非形式化的描述来说,一个中位数(median)使它所属集合的“中点元素”.当n为奇数时,中位数是唯一的,位于i=(n+1)/2处.当n为偶数时,存在两个中位数,分别位于i=n/2和i=n/2+1处.因此不考虑n的奇偶性,中位数总是出现在i=floor((n+1)/2)处(下中位数)与i=ceil((n+1)/2)处(上中位数).本章将讨论一个由n个互异的元素构成的集合中选择第i个顺序统计量的

算法导论-中位数和顺序统计量

在一个由n个元素组成的集合中,第i个顺序统计量是该集合中第i小的元素.一个中位数是它所属集合的“中点元素”.当n为奇数时,中位数是唯一的,位于i=(n+1)/2处:当n为偶数时,存在两个中位数,分别位于i=n/2和i=n/2+1处.如果不考虑n的奇偶性,中位数总是出现在i=⌊(n+1)/2⌋处(下中位数)和i=⌈(n+2)/2⌉(上中位数). 1.最小值和最大值 在一个有n个元素的集合中,需要做n-1次(上界)比较才能找到最小值或最大值. int MiniValue(const int *A,