`
gqf2008
  • 浏览: 77156 次
  • 性别: 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 不存在}
改:  查寻+删除+插入

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

相关推荐

    检索 COM 类工厂中 CLSID 为 {96749377-3391-11D2-9EE3-00C04F797396} 的组件失败,没有注册类问题分析和解决办法

    标题中的“检索 COM 类工厂中 CLSID 为 {96749377-3391-11D2-9EE3-00C04F797396} 的组件失败,没有注册类问题分析和解决办法”是一个常见的错误提示,通常在尝试使用COM组件(Component Object Model)时遇到。这个...

    lucene全文检索案例源码

    本篇将围绕“lucene全文检索案例源码”展开,深入探讨Lucene的工作原理及其在实际案例中的应用。 一、Lucene简介 Lucene是由Apache软件基金会开发的全文检索引擎,它提供了一个高效、可扩展的全文检索框架。Lucene...

    号码章编号字体号码机字体

    正如给定文件中提到的“号码章编号字体号码机字体”,我们不难发现其指向的是专门用于制作号码章或编号设备的字体。这些字体不仅仅是简单的数字化字符,它们承载着清晰性、规范性以及功能性,是确保数字和字母能准确...

    zlib1g-dev_1.2.3.4.dfsg

    zlib1g-dev_1.2.3.4.dfsg

    嵌入式Linux内存与性能详解

    嵌入式Linux系统在各种设备和应用中广泛使用,其内存管理和性能优化是开发者面临的重要问题。本资源《嵌入式Linux内存与性能详解》详细阐述了这些关键领域,为理解嵌入式系统的内在机制提供了深入见解。 1. **...

    RTX 共享内存示例源代码

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

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

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

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

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

    内存卡低级格式化工具

    5. **安全弹出**:格式化完成后,正确地从设备中安全弹出内存卡,再插入到其他设备中检查是否恢复正常。 内存卡低级格式化虽然能够解决一些严重问题,但也有其风险,例如可能导致内存卡的使用寿命缩短。因此,平时...

    Delphi使用SQLite3内存数据库

    在本文中,我们将深入探讨如何在Delphi编程环境中利用SQLite3数据库系统,特别是关于本地数据库与内存数据库的使用。SQLite3是一种轻量级、自包含的数据库引擎,它不需要独立的服务器进程,使得在Delphi应用程序中...

    vs2010内存泄露检查工具

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

    内存稳定性测试工具

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

    黑莓手机系统中文语言包

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

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

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

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

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

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

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

    易语言编写自已CE内存修改器 源码

    在编程领域,尤其是游戏开发与逆向工程中,内存修改器是一种常见的工具,用于查看和修改程序运行时的内存内容,以达到调试、分析或者作弊的目的。"易语言"是一款以中文为编程语言的编程环境,它以其简单易懂的语法...

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

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

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

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

Global site tag (gtag.js) - Google Analytics