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

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

相关推荐

    智能信息检索+信息检索导论课程+期末复习题库

    【智能信息检索与信息检索导论课程】是计算机科学领域中的关键课程,主要涉及如何高效地从大量数据中寻找相关信息。课程涵盖了搜索引擎的工作原理、信息检索算法以及评估方法等内容。 在【期末复习题库】中,我们...

    信息检索导论_王斌译_课后习题答案

    矩阵中的每个元素表示相应词项在对应文档中出现的次数。 以文档集为例: - 文档1: `breakthrough drug for schizophrenia` - 文档2: `newschizophrenia drug` - 文档3: `new approach for treatment of ...

    android+lucene实现全文检索并高亮关键字

    在Android平台上实现全文检索并高亮关键字是一项技术挑战,但通过集成Apache Lucene库,可以有效地解决这个问题。Apache Lucene是一个高性能、可扩展的信息检索库,它为开发人员提供了强大的文本搜索功能。以下是对...

    手机号码交易网手机选号网站源码

    标题中的“手机号码交易网手机选号网站源码”指的是一个用于在线交易手机号码的网站系统,其核心是源代码,使用的是ASP编程语言和Access数据库。这种网站源码为开发者提供了一个基础平台,用于搭建自己的手机号码...

    android+lucene实现全文检索并高亮关键字索引库

    下面我们将深入探讨如何在Android环境中利用Lucene来创建一个高效、功能丰富的全文检索系统,并了解如何高亮显示搜索结果中的关键字。 首先,我们要理解全文检索的基本原理。全文检索是指通过建立倒排索引来快速...

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

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

    百度地图检索开发

    本文将深入探讨"百度地图检索开发"的相关知识点,包括POI(Point of Interest)检索、路线检索以及如何利用源码进行开发。 1. **POI检索** POI检索是百度地图API的核心功能之一,它允许开发者根据关键词或地理位置...

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

    在IT行业中,尤其是在文本处理和排版领域,字体设计是一个重要的环节。"号码章编号字体号码机字体"这个标题指的是专门用于制作号码章或者编号设备的特殊字体。这些字体通常具有清晰、规范的特点,以便于打印或刻制的...

    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>...

    内存卡低级格式化工具

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

    Delphi使用SQLite3内存数据库

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

    vc 获取指定进程的cpu占用率和内存使用量

    在VC++环境中,获取指定进程的CPU占用率和内存使用量是常见的系统监控任务,尤其在开发性能分析或系统管理工具时。VS2008提供了丰富的库和API调用来实现这一功能。以下是对这个话题的详细阐述: 首先,我们需要了解...

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

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

    vs2010内存泄露检查工具

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

    Android 获取本机号码

    本文将深入探讨如何在Android中获取设备的本机电话号码,并结合实践,解析相关代码。 首先,我们需要了解Android的权限系统。由于涉及用户隐私,Android系统对获取电话号码进行了严格的权限控制。在AndroidManifest...

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

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

    仿360手机助手秒装和智能安装功能源码

    【标题】"仿360手机助手秒装和智能安装功能源码"涉及的主要知识点是Android系统的静默安装(Silent Installation)以及智能安装技术。360手机助手是一款流行的安卓应用管理工具,其秒装和智能安装特性使得用户能够...

Global site tag (gtag.js) - Google Analytics