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)个最小元素。

  • 相关阅读:
    SpringBoot实现原理
    常见Http状态码大全
    forward(转发)和redirect(重定向)有什么区别
    1094. Car Pooling (M)
    0980. Unique Paths III (H)
    1291. Sequential Digits (M)
    0121. Best Time to Buy and Sell Stock (E)
    1041. Robot Bounded In Circle (M)
    0421. Maximum XOR of Two Numbers in an Array (M)
    0216. Combination Sum III (M)
  • 原文地址:https://www.cnblogs.com/chenhuanfa/p/2776404.html
Copyright © 2011-2022 走看看