zoukankan      html  css  js  c++  java
  • [算法学习] 中位数和顺序统计学

    今天学习《算法导论》 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)个最小元素。

  • 相关阅读:
    Spring事务原理分析-部分二
    Spring事务原理分析-部分一
    Spring 通读官方文档
    Spring IOC 源码解析
    SpringAOP原理分析
    Docker学习笔记
    TCP、UDP和HTTP关系
    洛谷P3312
    洛谷P3327
    BZOJ3073
  • 原文地址:https://www.cnblogs.com/chenhuanfa/p/2776404.html
Copyright © 2011-2022 走看看