数据量很大的排序问题 大量数据如何排序

本文探讨了如何处理大规模数据集的排序及重复项检测问题,提出了利用数据分片结合平衡二叉树的方法来实现O(n)的时间复杂度,并讨论了在有限内存下找出重复频率最高的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

   问题一:若有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条进行排序找到 重复率最高的十条即可;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值