[b.d]--算法题-求万级别的电话号码的排序

本文介绍了如何解决万级别电话号码的排序问题,提供了解题思路和伪代码。

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

先给出问题的描述以及解决思路:

/**
 * Created by louyuting on 2017/2/24.
 *
 * Question: 对某公司员工的所有电话号码进行排序, 数据量级别明显是万级别的.
 *
 * category: 大数据量进行排序
 *
 * solution: (1)首先根据电话号码的号段进行分类, 分为130-139, 150-159, 180-189 也就是30个分段,这里就是桶排序的思想
 *           (2)然后就是对每个分段进行排序(也就是对每个桶进行排序)
 *                  这里利用类似于hash表的思路,因为每个电话号码要么存在要么不存在,所以用bit来标识每个位是否存在.
 *                  如果不用bit,用整形的话,计算一下,30*8^10 =  30亿条记录, 如果存整形的话,一个数字是4字节,总共是120亿个字节. 计算一下就是11.4GB,这就占太大的内存了;
 *                  这个时候我们换个思路,利用bit来存储,因为电话号码本来就是连续的,而且我们只标识某一个电话号码是否存在,所以没毛病,
 *                  这时候原本4字节保存一个标志位,就变成了bit位,缩小了 4*16=64倍, 所以占内存就变成了178M, 这时候就能接受了.
 *                  而且每个分段的内存大小是约5.9M
 *
 *           (3)由于每个分段之间本身就是有序的,所以现在只用关心各自分段的部分. 这就类似于利用哈希表来标识每个电话号存不存在.
 *              1)这时候的核心就是: 输入一个电话号码,装换为整形,根据前面三位分别进入不同的桶;
 *              2)在不同桶内,根据电话后8位,计算出在一个桶内的坐标位,然后响应的bit 置为1;
 *              3)判断完所有电话号码之后,就可以通过一轮遍历获取所有电话号码和排序结果.
 *
 *  analysis: 时
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值