zoukankan      html  css  js  c++  java
  • TOP K问题

    题目描述:查找数组中最小的k个数。

    思路:

    (1)维护k个元素的最大堆,即用容量为k的最大堆存储最先遍历到的k个数,并假设它们即是最小的k个数,建堆费时O(k)后,有k1<k2<...<kmax(kmax设为大顶堆中最大元素)。继续遍历数列,每次遍历一个元素x,与堆顶元素比较,x<kmax,更新堆(用时logk),否则不更新堆。这样下来,总费时O(k+(n-k)*logk)=O(n*logk)。此方法得益于在堆中,查找等各项操作时间复杂度均为logk。

    (2)把数组构造成最小堆,然后取前k个值。复杂度O(n)+k*O(log n),即为:O(n+k*logn)。

      采取建立n个元素的最小堆后取其前k个数的方法的复杂度小于采取常规的建立k个元素最大堆后通过比较寻找最小的k个数的方法的复杂度。但建立n个元素的最小堆,其空间复杂度为O(N),而建立k个元素的最大堆的空间复杂度为O(k)。综合考虑,一般还是选择用建立k个元素的最大堆的方法解决此类寻找最小的k个数的问题。

    大数问题:

  • 相关阅读:
    Redis配置文件详解
    Redis基本操作-20150608
    Redis操作命令
    JedisPoolConfig配置
    jedis提供的功能
    配置Redis主从复制
    python数组查找算法---bisect二分查找插入
    python赋值和拷贝----一切皆对象,参数皆引用
    xml 解析 python
    进阶中级程序员需要做的事
  • 原文地址:https://www.cnblogs.com/hesier/p/5894686.html
Copyright © 2011-2022 走看看