39个答案 按时间排序 按投票排序
-
将电话号码转为数值型
数值代表位图的偏移量
创建一个100,000,000/8+1大小的byte数组作为位图
num/8表示偏移量
num%8表示在该byte的第几位
如果该位是0,置为1
如果是1,已经重复2012年6月04日 23:15
-
假设电话号码是8位的(有些城市是7位的,如果带区号的话自己根据这个思想做变换即可)
那么不管存在不存在,所有的电话号码一共有10^8个
建立一个int类型的数组,数组大小为3125000,共需要不到12M的内存
可以存储10^8个布尔类型的值(一个int占32位,没一位相当于一个布尔值),每个布尔类型的值对应一个号码,初始化的时候让数组里的每个值都为0
也就是说现在数组里所有的布尔值都为false
然后从文件里读出第一个号码,假设号码是00000001,那么就将数组里第0个值的第二位设置为1,也就将这个号码标识为存在,下次再读入时就根据标识判断是否重复
说简单点,就相当于你将10^8个二进制数排队站着,然后将所有的电话号码排队站着,把他们看成是一对一的关系,如果一个号码发现自己的位置被比人占了,那么这个号码一定是重复的
当然因为电话号码并不可能是00000001,所以可以针对电话号码的情况做一些优化,而不必要申请3125000个int大小的内存。2012年6月04日 18:19
-
可以考虑使用二个BitSet(长度为电话号码的最大值)设为bitSet1,bitSet2,利用clear()将所有位都置为false。
读取一个电话号码后(先读入多条记录到缓冲区),判断其数值对应bitSet1位置,若为false,则置为true,否则将bitSet2中相应位置置为true,以此类推……
所有电话号码处理完后,bitSet2中的为true的位置即为重复的电话号码。
祝好!2012年9月07日 17:41
-
不用数据库的话,可以参考BitSet的思路,自己设计一个类似的位序列bucket,根据号码映射到位序列中,置位 ,保证不同的号码映射到不同的位置就行了,可以对号码做个优化处理或者位序列够大就行
2012年9月05日 10:38
-
一般都是导入数据库再update telcode= trim(telcode);
然后再select distinct telcode from table_name;2012年8月29日 11:08
-
你知道berkeleydb嵌入式数据库吗?从数据结构的角度来看那就是一个哈希表,而且它还有个优点是随时和硬盘相联系的,这样你的数据再多也不用担心内存溢出问题,或者用布隆过滤器一样可以解决的
2012年8月15日 16:56
-
Bloom Filter
文件多路归并排序
tire 树 估计内存放不下
但是可以考虑前6位trie树 后面文件
BloomFilter是最简单的..但是不一定准确
如果我做..我选择归排序吧...2012年6月21日 11:18
-
这个问题有两个棘手的地方:
1、这个100w条号码文件肯定不能一次读到内存中来的,应该分片段读取,方法是什么?
利用java.nio中的内存映射文件可以分段读取数据与处理数据,可以解决java.io中对大文件处理的不足。
2、接着上一步分段读取到内存中来之后,肯定不能放内存中,应该将刚读好的数据片段立即转移到其他存储介质中,以释放内存空间,否则这就和一次性读到内存没什么差别了,这里可以根据需要可以选择传统的关系数据库如MySQL和K-V数据库如Redis等等(后者属于NOSQLk-v型数据库,IO性能极高,做count也很容易)2012年6月06日 13:34
-
《编程珠玑》上对这个问题有精彩的解答。推荐你看看
http://ishare.iask.sina.com.cn/f/13310338.html2012年6月06日 09:31
-
hashMap是个不错的思路,根据内存决定一次读入内存多少数据,key为号码,value为出现次数,若hashmap里已经有了该号码,则value+1,
2012年6月06日 09:00
-
不是做数据库的,只说一下我的想法:
1.将100万电话按照前两位进行分组,例如18*****、15*****、19*****分组
2.对每个分组内电话号码进行去重操作(现在内存能跑的开了吧)2012年6月06日 08:55
-
解决方案:
一.借助数据库
1.先分割成几个一定大小文件,使用多线程(可选)再将一个个小文件导入到一张表中
2.使用order by 电话号码
3.统计数据库总行 - 再使用"distinct"去重复=重复的行数
二.使用google
将其做成一个网页,再使用"google自定义搜索"ok(有计数功能)
三.使用Apache lucene全文检索2012年6月05日 12:39
-
这个命题有点像电信计费系统从交换机上去下载二进制文件,然后根据文件中的数据进行用户计费的。
如果是相似需求的话,可以找一找相关计费资料看看的,那个计费效率很高的。2012年6月05日 11:58
-
玩过map-reduce的话,做这个题应该是没问题!
简单处理:对文件进行分片(N), hash code % N -->分发到不同的reduce,这样相同号码肯定在一个reduce中2012年6月05日 09:53
-
根据你计算机的运算能力,把电话号码比如说以前3位为过滤分组依据,可把一个大文件分为最多999个小文件,小文件内大概平均也就是1000个电话号,顶多也就是8位-3位=5位,也就是说所分的这些小文件里,最大的极限值,也就是99999个电话号码,在内存是不成问题的,这也就解决了内存不足的问题,至于怎么去筛选,自己想把
2012年6月05日 01:01
-
定义int二维数组,电话号码前4位作一维数组下标,4位后面的做二维下标,相同号码在对应下标数组值加1,二次循环就能完全找出重复号码个数,重复次数 除了占CUP外,内存占用相当少
2012年6月05日 00:14
-
假设电话号码是8位的(有些城市是7位的,如果带区号的话自己根据这个思想做变换即可)
那么不管存在不存在,所有的电话号码一共有10^8个
建立一个int类型的数组,数组大小为3125000,共需要不到12M的内存
可以存储10^8个布尔类型的值(一个int占32位,没一位相当于一个布尔值),每个布尔类型的值对应一个号码,初始化的时候让数组里的每个值都为0
也就是说现在数组里所有的布尔值都为false
然后从文件里读出第一个号码,假设号码是00000001,那么就将数组里第0个值的第二位设置为1,也就将这个号码标识为存在,下次再读入时就根据标识判断是否重复
说简单点,就相当于你将10^8个二进制数排队站着,然后将所有的电话号码排队站着,把他们看成是一对一的关系,如果一个号码发现自己的位置被比人占了,那么这个号码一定是重复的
当然因为电话号码并不可能是00000001,所以可以针对电话号码的情况做一些优化,而不必要申请3125000个int大小的内存。2012年6月04日 18:17
-
思路:多线程利用map->reduce算法
分片:
0.遍历文件,目的是“采样”,找到最大值和最小值,并且掌握数据的大概分布。
1.分割文件:将大文件分割为小文件。比如总共10G。分割为100个文件。每个文件100M
3.计算当前需要的线程数。比如总共数据10G。分割为100个文件。当前可用内存为1G。那么线程数据数就是10(1G/100M).需要处理10轮。
map:
4.每个线程遍历分割后的数据,按照采样点将其保持到不同的输出文件中。
reduce
5.依次遍历所有输出文件。找出相同的数据。2012年6月04日 17:52
相关推荐
【注意】建表需要先建库,然后在mysql中运行: source /路径/t100w.sql 即可以导入100万条的数据,表结构如下: DROP TABLE IF EXISTS `t100w`; CREATE TABLE `t100w` ( `id` int(11) DEFAULT NULL, `num` int(11...
该代码可以处理100万数据量的excel文件,xlsx文件数据量太大,用普通的读法会报内存溢出错误,所以用官网提供的方法,一条一条的读取大excel文件,本例子从这点出发,组装excel里读取的单条数据为list,在根据需求...
从一亿个数中找出最大的100个 或者n个 用了个堆
我的目标是让Fileaxy管理100万个可用和不可用的文件,以及它们之间的关系。 特征 仅查看内容重复的文件 查看仅翻转或旋转相似的图像 使用每月修改直方图查看文件的日日历 计算多文件MD5,SHA-1或SHA-256 ...
往mysql数据库中导入100万条数据的数据文件,往mysql数据库中导入100万条数据的数据文件,往mysql数据库中导入100万条数据的数据文件,往mysql数据库中导入100万条数据的数据文件,往mysql数据库中导入100万条数据的...
1. 给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url? 2. 有10个文件,每个文件1G,每个文件...5. 在2.5亿个整数中找出不重复的整数,内存不足以容纳这2.5亿个整数。
使用多线程对数据进行查重去重处理,处理100万的数据不到1.5秒,软件界面简洁美观,操作简单,软件大小只有70KB,软件提示友好,比如在操作日志上会实时显示正在处理那个文件,还会将重复的数据显示在重复数据列表中...
由于项目需要对大量Excel数据进行输入输出处理,在使用JXL,POI后发现很容易出现OOM,最后在网上找到阿里的开源项目EasyExcel能很快速的读取写入超大Excel文件。经过大量的调试优化,现通过JAVA生成104万行20列的...
mysql进行压力测试100万行数据,测试数据库的查询能力。
程序刚开始设计的时候说的是最多百万级别数据,最多50W数据生成到一个xml文件里面去,所以在做测试的时候自己也只是造了100W的数据并没有做过多数据量的测试,然后问题就来了....由于程序使用的局点数据量巨大,需要...
从一亿个数中找出最大的100个 或者n个 用了个堆从一亿个数中找出最大的100个 或者n个 用了个堆
中国100万植被类型空间分布数据
1:100万全国基础地理信息数据,数据是基于2015年官方发布的内容。为.shp格式文件,能够在ArcGIS软件中直接使用。
EasyExcel导入50个字段,100万数据耗时几分钟,亲测有效
100万条数据导入SQL数据库仅用4秒,100万条数据导入SQL数据库仅用4秒
ListView快速显示100万条数据用时1秒 最精简单代码演示快速显示
movielens数据集(包含全部数据:10万、100万、1000万条评分数据)
实现数据的重复过滤功能,可灵活加入到任何系统中使用
这是我在公司实习的时候研究的课题,主要将大量数据从数据库导出到Excel文件。(一般是值Excel2007及以后版本)因为Excel2003及以前的版本中能保持的数据量是有限制的。Excel2007及以后版本中的数据能保持100万条...
全球1:100万世界水系数据shp格式