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
相关推荐
电话号码去重是一个关键的业务需求,例如在客户管理系统、市场营销或数据分析中,避免重复的电话号码可以提高效率,减少资源浪费。 Java作为一种多用途且广泛应用的编程语言,提供了丰富的库和工具来处理数据处理...
从压缩包子文件的文件名称列表来看,只有一个文件名“2015年 1:100万全国基础地理信息数据”,可以推测这可能是一个压缩包,其中包含了多个与上述描述相符的地理信息数据文件,如.shp、.dbf、.shx等。 使用这样的...
在这个例子中:我们为内存映射文件定义文件路径 ( filePath) 和大小 ( )。fileSize在本例中,我们正在处理一个 100 MB 的文件。我们使用创建或打开内存映射文件MemoryMappedFile.CreateFromFile。如果该文件不存在,...
### Java处理100万行超大Excel文件秒级响应 #### 一、问题背景与需求分析 在项目开发过程中,经常会遇到需要处理大量Excel数据的情况。这些数据可能包括成千上万条记录,每条记录又包含多个字段。传统的处理方式...
本示例将详细介绍如何通过优化技术使ListView在1秒内快速加载并显示100万条数据。 首先,关键在于使用高效的适配器(Adapter)和数据加载策略。通常我们会采用`BaseAdapter`或`CursorAdapter`进行自定义,以避免...
4. 循环读取文件,每次读取100万行,将数据存储到内存中的一个列表或数组。 5. 当数据达到批处理大小时,使用`SqlBulkCopy`批量写入数据库。 6. 在每个批次完成后,关闭`SqlBulkCopy`,清空内存数据,然后继续下一...
全国1:100万地图矢量数据部分是地理信息系统(GIS)中的一种重要资源,它提供了关于中国地理特征的详细信息。这类数据通常由专业机构制作,用于科学研究、城市规划、交通管理、环境保护等多个领域。矢量地图数据不同...
【注意】建表需要先建库,然后在mysql中运行: source /路径/t100w.sql 即可以导入100万条的数据,表结构如下: DROP TABLE IF EXISTS `t100w`; CREATE TABLE `t100w` ( `id` int(11) DEFAULT NULL, `num` int(11...
全球1:100万世界水系数据是一个重要的地理信息系统(GIS)资源,它以shapefile(shp格式)的形式提供了世界各地水体的详细信息。Shapefile是Esri公司开发的一种常见矢量数据格式,常用于存储地理空间数据,如点、线...
在Java开发中,处理大数据量的数据导出是一个常见的挑战,特别是在CSV格式的文件处理上。CSV(Comma Separated Values)是一种广泛使用的数据交换格式,因其简单性和通用性而受到青睐。然而,当数据量达到千万级别时...
《中国1:100万基础数据》是一个包含详尽地理信息的综合数据集,它提供了对中国各级行政区域,如省、市、县的精确地理坐标表示,以及关键的基础设施特征,如公路、河流、铁路和湖泊的详细信息。这个数据集采用的是...
100万条数据在大数据领域中算是一个中等规模的数据集。对于这样的数据集,可以采用不同的数据分析方法和技术来进行处理。例如,可以通过统计分析、机器学习模型等手段挖掘出有价值的信息。 ### 三、流数据的概念 ...
往mysql数据库中导入100万条数据的数据文件,往mysql数据库中导入100万条数据的数据文件,往mysql数据库中导入100万条数据的数据文件,往mysql数据库中导入100万条数据的数据文件,往mysql数据库中导入100万条数据的...
在IT行业中,处理数据是日常任务之一,而CSV(Comma Separated Values)文件因其简单易用和通用性,成为了数据交换的常用格式。当面对大量CSV数据时,有时我们需要检查其中是否存在重复的数据,以便进行数据清洗或...
总结来说,实现100万条数据在4秒内导入SQL Server数据库,需要结合C#的SqlBulkCopy、异步操作、数据预处理、优化的数据库设计以及高性能的硬件配置。通过这些方法,我们可以最大化数据导入效率,应对大数据挑战。而...
该代码可以处理100万数据量的excel文件,xlsx文件数据量太大,用普通的读法会报内存溢出错误,所以用官网提供的方法,一条一条的读取大excel文件,本例子从这点出发,组装excel里读取的单条数据为list,在根据需求...
mysql进行压力测试100万行数据,测试数据库的查询能力。
内存恢复的主要原理是基于这样一个事实:当文件被删除或覆盖时,其数据实际上并未立即从内存中完全清除。操作系统会标记该区域为可用空间,但实际数据可能仍然存在于未被新数据覆盖的物理地址上。内存恢复软件利用这...
程序刚开始设计的时候说的是最多百万级别数据,最多50W数据生成到一个xml文件里面去,所以在做测试的时候自己也只是造了100W的数据并没有做过多数据量的测试,然后问题就来了....由于程序使用的局点数据量巨大,需要...
"文本文件,删除重复行(exe文件)" 提供了解决这一问题的一个高效解决方案,它使用Pascal语言编写,能在短时间内处理大量数据,如100万行、100MB的文本文件,并在0.3秒内完成重复行的删除。这个程序包含两个版本,...