`
gqf2008
  • 浏览: 78295 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

【探讨】给你1G内存,如何从3000万个手机号码中检索出你要的号码,要求每秒检索>1000次

    博客分类:
  • java
阅读更多
给你1G内存,如何从3000万个手机号码中检索出你要的号码,要求每秒检索>1000次

大家来探讨,发表您的意见!
分享到:
评论
25 楼 fly_hyp 2008-06-03  
终极解决方案:
将手机号用整数表示,一个手机号占4byte内存
将所有手机号排序放入3000万的整数数组中。
4 * 3000 * 10000 需要 120M内存

查询时使用二分法,足够满足你的速度要求
24 楼 gqf2008 2007-11-26  
3000个10000长度的数组就可以了
23 楼 Eastsun 2007-11-25  
唔,那怎么用一个10000长度的数组保存3000万个信息呢?
蛮神奇的.
22 楼 gqf2008 2007-11-25  
不用,主要是通过数组下标来定位,关键的问题是要把数组长度尽量缩小
21 楼 Eastsun 2007-11-23  
还是要进行二次检索,三次检索?
20 楼 Eastsun 2007-11-23  
抛出异常的爱 写道
13是表示手机
下几位是表示运营公司
再下几位是表示发行区域
最后几位才是人
所以只有最后几位是有必要放进数组中的
其它的可以压缩。。。。到4位以内


4位,也就是少于10^4 =10000= 1万个手机号码.

gqf2008 写道
给你1G内存,如何从3000万个手机号码中检索出你要的号码,要求每秒检索>1000次

大家来探讨,发表您的意见!


3000万 = 3*10^7

难道说这3000万手机号码里面有重复的?
19 楼 gqf2008 2007-11-23  
=================结贴=================
18 楼 gqf2008 2007-11-23  
抛出异常的爱 写道
13是表示手机
下几位是表示运营公司
再下几位是表示发行区域
最后几位才是人
所以只有最后几位是有必要放进数组中的
其它的可以压缩。。。。到4位以内
正解,怎么解决我想大家都明白了
17 楼 抛出异常的爱 2007-11-23  
13是表示手机
下几位是表示运营公司
再下几位是表示发行区域
最后几位才是人
所以只有最后几位是有必要放进数组中的
其它的可以压缩。。。。到4位以内
16 楼 gqf2008 2007-11-23  
抛出异常的爱 写道
gqf2008 写道
抛出异常的爱 写道
试试这个:
static long a = new long[20000000000]

插入: a[tel]=1;
删除: a[tel]=0;
查寻: if(a[tel]==0){return 不存在}
改:  查寻+删除+插入

每个手机号放入对应的位置


用数组下标作为手机号码想法不错,不过你的实现会把内存撑爆,不信你试试看!提示:手机号码是11位的,将来可能12位


10的11次方。。。。。。13XXXXX的13可以去掉了。
呵呵 15号段早就出来了,以后可能还有好多号段出来,不过你的想法已经离成功不远了,我想应该可以把号码按号段分开来实现比较合理,例如可以把前面7位和后面4为分开出来,这样应该就可以实现了
15 楼 抛出异常的爱 2007-11-23  
gqf2008 写道
抛出异常的爱 写道
试试这个:
static long a = new long[20000000000]

插入: a[tel]=1;
删除: a[tel]=0;
查寻: if(a[tel]==0){return 不存在}
改:  查寻+删除+插入

每个手机号放入对应的位置


用数组下标作为手机号码想法不错,不过你的实现会把内存撑爆,不信你试试看!提示:手机号码是11位的,将来可能12位


10的11次方。。。。。。13XXXXX的13可以去掉了。
14 楼 gqf2008 2007-11-22  
ddandyy 写道
不说了  删除
做人要厚道
13 楼 ddandyy 2007-11-22  
不说了  删除
12 楼 gqf2008 2007-11-22  
ddandyy 写道
不知道LZ在想的是什么

不过肯定没有你想的那么复杂

要求每秒1000次?  那肯定是并发了.....

既然是并发  那么单次的时间有多少又有什么关系呢  肯定会在1秒以内出来


过滤手机号码是一个很正常的事情,每秒1000次是最底要求,如果你知道了这个算法就不复杂了,可惜你我就是不知道,所以让大伙出出方案撒!
11 楼 gqf2008 2007-11-22  
抛出异常的爱 写道
试试这个:
static long a = new long[20000000000]

插入: a[tel]=1;
删除: a[tel]=0;
查寻: if(a[tel]==0){return 不存在}
改:  查寻+删除+插入

每个手机号放入对应的位置


用数组下标作为手机号码想法不错,不过你的实现会把内存撑爆,不信你试试看!提示:手机号码是11位的,将来可能12位
10 楼 Eastsun 2007-11-22  
二分法,时间复杂度 log N
9 楼 liangguanhui 2007-11-22  
是否可以做缓存?然后排序查找
8 楼 抛出异常的爱 2007-11-22  
ddandyy 写道
........
应该是手机号绑定其他的信息吧......

如果光是手机号 也不用检索什么的了......
我只是从需求的角度说的。。。。其它的不理
(要求的是速度,那只能这么作了)

多的信息,只能用分冶法了。
7 楼 ddandyy 2007-11-22  
........
应该是手机号绑定其他的信息吧......

如果光是手机号 也不用检索什么的了......
6 楼 抛出异常的爱 2007-11-22  
试试这个:
static long a = new long[20000000000]

插入: a[tel]=1;
删除: a[tel]=0;
查寻: if(a[tel]==0){return 不存在}
改:  查寻+删除+插入

每个手机号放入对应的位置

相关推荐

    图书检索系统java

    这是我帮同学做的一个简单的图书检索系统。<br><br>功能还比较完整,需要的朋友可以参考。<br><br>(直接双击即可运行)<br>1.jdK 1.5以上,并配置了相关的环境变量。<br><br>2.无需配置数据源,但别移动目录下的...

    RTX 共享内存示例源代码

    1. **定义共享内存**:在C代码中,我们可以定义一个全局变量,这个变量将作为共享内存区域。例如,可以定义一个结构体,其中包含需要交换的数据。 ```c typedef struct { int data; char message[50]; } Shared...

    KMeans+BOF实现图像检索(Matlab)

    在图像检索中,KMeans常用于对图像特征进行量化,将高维特征空间分割成若干个簇,每个簇的中心代表一个“视觉词”。 步骤如下: 1. 初始化:随机选取K个数据点作为初始质心。 2. 聚类:计算所有数据点到这K个质心的...

    几种内存池的实现(c/c++ 源码)

    内存池是一种优化内存分配策略的技术,它通过预先分配一大块连续的内存,并将这些内存划分为多个固定大小的小块,来提升程序运行效率和降低内存碎片。在C/C++编程中,内存池常用于频繁创建和销毁小对象的场景,如...

    java导出30万数据量的excel(采用生成多个excel,最后打包zip)

    在Java开发中,处理大数据量的Excel导出是一项常见的任务,尤其当数据量达到数十万条时,单个Excel文件可能会遇到性能瓶颈或格式限制。本项目针对这一问题提出了一种解决方案,即分块生成多个Excel文件,然后将它们...

    汇编语言 20个练习题目 代码加实验报告

    5.15 数据段中已定义了一个有N个字数据的数组M,试编写一程序求出M中绝对值最大的数,把它放在数据段的M+2n单元中,并将该数的偏移地址存放在M+2(n+1)单元中。 5.16 在首地址为DATA的字数组中,存放了100H个16位...

    内存SPD文件大全(包括多年自己收集的)

    内存是计算机中至关重要的组成部分,它负责临时存储CPU在运行程序时所需的数据。SPD(Serial Presence Detect,串行存在检测)文件则是内存模块上的一个重要数据存储器,它包含了关于内存条的制造商信息、规格参数...

    LTFViewr打开大文本文件工具(大于1G以上的文本文件)

    LTFViewr打开大文本文件工具(大于1G以上的文本文件) 解决了大文件notepad、rtf、word等工具打开超级慢甚至都不能打开的问题 本软件是分页显示,比notepad、rtf、word等工具效率高,显示效果好,大家不妨试着用用

    设计哈希表实现电话号码查询系统

    在本实验中,设计了一个基于哈希表的电话号码查询系统。哈希表是一种高效的数据结构,用于存储和检索数据,其主要特点是通过关键字(在本例中是电话号码和用户名)快速定位到数据记录。以下是对这个系统设计的详细...

    浏览器内存监测工具(Drip,sIEve,JSLeaksDetector)

    1. **内存快照**:在特定时间点捕获浏览器的内存状态,记录当前在内存中的对象。 2. **操作与比较**:执行特定操作(如页面导航、用户交互或API调用),然后再次获取内存快照。 3. **差异分析**:对比前后两次快照,...

    从2014 到2016,大规模内存数据库演进之路

    例如,某集群在双11当日的峰值TPS(每秒事务数)超过200万,且99%的延迟低于2毫秒。 8. 监控体系与数据安全 为了确保数据库的稳定运行,京东建立了完善的监控体系,涵盖数据管道、报警网关、接口切换等方面。同时...

    c# 对sqlite基本操作,带批量插入(百万级秒插)

    在本文中,我们将深入探讨如何使用C#进行SQLite的基本操作,特别是关注批量插入功能,这在处理大量数据时尤其有用,如标题所述,可以实现百万级数据的秒级插入。SQLite是一个轻量级的数据库引擎,它允许在无需服务器...

    android 获取cpu使用率, 内存 实时数据

    内存则分为总内存和可用内存,总内存是设备物理内存的总量,而可用内存则是当前系统可分配给应用使用的内存。 在Android中,获取CPU使用率通常需要读取 `/proc/stat` 文件,该文件包含了系统运行的各种统计信息。...

    Delphi多个DLL共享全局数据Demo

    在这个场景中,我们将深入探讨以下几个关键知识点: 1. **DLL的基本概念**:动态链接库是一种可执行文件格式,它包含可被其他程序(如应用程序或其它DLL)使用的函数和数据。DLL有助于减少内存占用和提高代码复用性...

    android自定义View之仿通讯录侧边栏滑动,实现A-Z字母检索

    这个功能常见于许多手机应用中,用于快速定位和筛选以特定字母开头的联系人。 首先,我们要理解自定义View的基本概念。自定义View是通过继承Android系统提供的View或 ViewGroup 类,并重写其关键方法来实现的。在这...

    实时录音与播放的内存实现 Qt代码

    在Qt框架下实现实时录音与播放的内存实现是一项常见的任务,尤其对于开发多媒体应用或通讯软件的工程师来说。Qt提供了一套丰富的库,使得音频处理变得相对简单。本篇文章将详细探讨如何使用Qt来实现这一功能,以及...

    使用android手机陀螺仪传感器获得手机自身旋转的角度

    每个轴的角速度数据以弧度每秒(rad/s)为单位输出,表示设备在这条轴上每秒旋转的角度。通过连续监测这些值,我们可以计算出设备相对于某一参考点的累积旋转角度。 在Android中,要访问陀螺仪传感器,我们需要使用...

    黑莓手机系统中文语言包

    本篇文章将详细探讨“黑莓手机系统中文语言包”的相关知识点,帮助用户解决语言问题。 首先,我们来理解“黑莓手机系统中文语言包”的概念。黑莓操作系统(BlackBerry OS)在出厂时可能不包含中文支持,尤其对于...

    中国Linux内核开发者大会十周年演讲稿(中兴通讯谢宝友)-Linux内存屏障

    7. **最佳实践**:最后,他可能给出了在实际开发中使用内存屏障的一些最佳实践,帮助开发者避免常见的并发编程陷阱。 谢宝友的演讲稿作为宝贵的资料,对于理解Linux内核中的并发控制和内存管理,以及提升在多处理器...

    基于Qt和opencv的身份证号码识别系统

    在这个身份证号码识别系统中,OpenCV主要负责图像预处理、特征提取以及模式识别等关键步骤。 **3. 身份证号码识别流程** - **图像采集**:首先,用户通过Qt界面上传身份证图片或者系统直接从摄像头捕获。 - **...

Global site tag (gtag.js) - Google Analytics