zoukankan      html  css  js  c++  java
  • 数据量很大的排序问题 大量数据如何排序

        某天参加阿里面试,技术面的时候,面试官问了排序问题:

       问题一:若有1T的数据,比如 只有两列,身份证号和姓名 需要实现由大到小排序,你用什么办法,能否做到 复杂度为O(n),说说你的思路和想法?
       问题二:有10个G的数据,也是一样,比如两列,身份证号和姓名,如果两条数据一样,则表示该两条数据重复了,现在给你512的内存,把这10G中重复次数最高的10条数据取出来。
     
    我的思路是:这么大的数据,用普通的排序一定不行,
    可以这样,用身份证号的前三位切割这个数据,这样会分成999份,
    每一份再进行排序,比如构造一个平衡二叉树,最典型的的就是TreeMap和TreeSet(TreeSet底层是使用了TreeMap算法,而TreeMap算法底层是实现了红黑树的平衡二叉树的排序);
    然后按照文件名进行排序,这样就实现了大数据排序;
    因为排序二叉树的复杂度为O(lgn)到O(n) ;
    因此我们可以做到 O(n)
     
    问题二:
     
    解法是一样的 按照身份证号前三位 分割999份,然后对这每个文件找到重复的最多的十条,这样,我们得到了999个文件,每个文件有 10条数据
     
    在对这个999*10条进行排序找到 重复率最高的十条即可;
  • 相关阅读:
    04_面向对象之多态
    03_面向对象之继承
    02_对象和对象封装
    01_什么是类
    01_函数对象
    python_IO操作之B模式介绍
    python_IO操作之rwa模式介绍
    python之初始IO操作01
    Flink基础(十七): Flink CEP 简介
    解决:UserBehavior is already defined as case class UserBehavior
  • 原文地址:https://www.cnblogs.com/aspirant/p/7190699.html
Copyright © 2011-2022 走看看