zoukankan      html  css  js  c++  java
  • topK

    最大K个数:

           当数据量小时:快排和堆排O(Nlog(N));部分排序(选择or交换)O(N*K)

                      快排加分治O(N*log(K));二分查找

    当数据是整数且重复数比较多时:计数排序;若不是整数,则分区间计数。

    当数据量大时:

    1)小根堆:O(N*KlogK)

    2)分治法:hash成M份数据,取每份数据的前K个。然后使用快排(分治)对M*K个数据求出K个数。【用MapReduce】

    实际应用:当数据量大,且重复数据多时,求频率最高的K个

    1)先用hash_map进行频率统计(得到一个数组)

    2)然后用小根堆(对数组)取前K。

    PS:若内存存储不了不重复的数据,则先将数据hash成M份文件。然后再对不同文件进行hash_map统计,然后去每份数据前K个,最后用快排(分治)对M*K个数据求出K个数【此处排序针对的是词频】

    4、第K大的数(两个有序数组):分治法(短的数组的K/2为切割点)

  • 相关阅读:
    Maven_自动化构建和构建环节
    Maven_运行时环境
    构建的概念
    Maven_真的需要吗?
    28)拷贝构造函数
    27)构造和析构函数
    26)多文件形式编写类步骤
    25)类的封装
    24)类
    23)函数重载和函数指针
  • 原文地址:https://www.cnblogs.com/xiangzhi/p/4639356.html
Copyright © 2011-2022 走看看