[算法学习] 中位数和顺序统计学

今天学习《算法导论》 chapter9,

查找数组中min:数组中元素个数为n,需要比较n-1次才能找出最小值。从比较次数来看,已经是最优的

同时找出min和max:最多需要3┌ n/2 ┐次比较

找到n个元素中的次小元素:最坏情况下,需要n+┌ lg n ┐-2次比较。需要有一个链表保存和最小值比较过的值。

找到n个元素中第i小的元素:

1、平均情况下,线性时间

  利用了RANDOMIZED_PARTITION算法。类似于快排。对输入数字进行递归划分,但每次只处理划分的一边。

  最坏情况下,时间复杂度是O(n2)。和快排类似

2、最坏情况线性时间的选择:SELECT算法

  (1)如果n=1,则select直接返回该值

  (2)将输入数组的n个元素划分为 n/5组,每组5个元素。且至多只有一个组由剩下的n mod 5个元素组成

  (3)寻找每个组的中位数,首先对每个组中的元素进行插入排序,然后从排序过的序列中选出中位数

  (4)对3步中找出的中位数,递归调用select以找出其中位数x(如果有偶数个中位数,根据约定,x是下中位数)

  (5)如果i=k,则返回x。否则,如果i<k, 则在低区递归调用select以找出第i小的元素。如果i>k,则在高区中找地第(i-k)个最小元素。

原文地址:https://www.cnblogs.com/chenhuanfa/p/2776404.html