`
gqf2008
  • 浏览: 78098 次
  • 性别: 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.无需配置数据源,但别移动目录下的...

    实现exe从资源中加载到内存中运行

    在Windows操作系统中,将EXE文件从资源中加载到内存并执行是一种常见的技术,它主要用于减少磁盘I/O操作,提高程序的启动速度,以及在某些特殊场景下保护程序不被篡改。以下是对这个主题的详细解释: 一、资源管理...

    RTX 共享内存示例源代码

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

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

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

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

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

    lucene3.5全文检索案例lucene+demo

    1. 文档(Document):Lucene中的最小处理单元,相当于数据库中的一条记录,由多个字段(Field)组成。 2. 字段(Field):文档的组成部分,每个字段都有特定的属性,如是否可被索引、是否可被存储等。 3. 分词器...

    c#获取系统和指定进程的CPU和内存占用率

    在C#编程中,了解如何获取系统和特定进程的CPU及内存占用率是十分重要的,尤其是在进行性能监控或资源管理的场景下。本篇将详细解释如何实现这一功能,并提供相应的代码示例。 首先,我们要关注的是操作系统级别的...

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

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

    C#编程经验技巧宝典

    10<br><br>0023 如何添加引用第3方控件 11<br><br>0024 如何生成DLL文件 11<br><br>0025 如何使用不安全代码 11<br><br>第2章 语言基础 13<br><br>2.1 注释 14<br><br>0026 如何对代码进行注释 14<br>...

    内存稳定性测试工具

    可靠的内存检测工具,通过对您的电脑进行储存与读取操作来...它不但可以彻底的检测出内存的稳定度,还可同时测试记忆的储存<br>与检索资料的能力,让你可以确实掌控到目前你机器上正在使用的内存到底<br>可不可信赖.

    30个html5手机网站源码

    在本篇文章中,我们将深入探讨HTML5在手机网站开发中的应用,以及通过分析30个不同的手机网站源码,你可以学到的关键知识点。 1. **响应式设计**:HTML5引入了媒体查询(Media Queries)和流式布局(Fluid Grids)...

    vs2010内存泄露检查工具

    在开发C++应用程序时,内存管理是至关重要的一个环节,因为不当的内存操作可能导致内存泄漏,这会消耗系统资源并最终导致程序崩溃或性能下降。Visual Studio 2010(VS2010)提供了一款强大的内存泄漏检查工具,帮助...

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

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

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

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

    最好的内存释放软件,支持win7 64位 效果相当好

    内存管理是计算机操作系统中的核心部分,特别是在Windows操作系统中,它对系统的性能有着直接影响。当我们谈论“内存释放软件”时,我们通常是指那些辅助系统优化工具,它们能够帮助清理和整理计算机的RAM(随机访问...

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

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

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

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

    Delphi多个DLL共享全局数据Demo

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

Global site tag (gtag.js) - Google Analytics