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为切割点)

  • 相关阅读:
    Linux 基础 —— RPM
    mysql主从复制
    mysql.user表中Host为%的含义
    MySQL + Atlas --- 部署读写分离(参考02)
    MySQL读写分离技术(参考)
    蚁群算法
    java 回调
    java 接口sort comparable
    matlab 求解高阶方程
    matlab 求解常微分方程
  • 原文地址:https://www.cnblogs.com/xiangzhi/p/4639356.html
Copyright © 2011-2022 走看看