• 【大数据开发工程师】面试——海量数据处理 之 Top K问题


    问题示例:

    从十亿个正整数中找出指定的数字。或者排序。

    思路

    先去重

    1. 直接排序。然后在排序后的集合上进行查找,取出前K位。

    问题是:int - 32位 - 8个字节,10亿个数*8字节得 4G存储空间。现在大部分机器内存都在8G以上,服务器内存都在128G,这个思路也能做排序。

       但是我们的目标是找出前K位,但是这种方式把所有的数的排序了,做了很多无用功。

    2.用容器保存K个数。将剩余的数与容器中的最小数字比较,如果后续的数字都小于这个最小值,则容器中的K个数即是我们想要的TOP K。

    3.把十亿数字分成1000份。每份100万个数据,然后找到每份的前K个,最后在1000*K里面找出最大的前K个。

     
  • 相关阅读:
    SpringBoot学习历程
    日期和时间库Joda Time
    apache commons validator
    apache commons fileupload
    apache commons io
    apache commons compress
    apache commons codec
    apache commons email
    Http协议介绍
    Java原生Socket API
  • 原文地址:https://www.cnblogs.com/lintong-zf/p/14230793.html
Copyright © 2020-2023  润新知