海量数据查找
来源:互联网 发布:mac intellij idea 卡 编辑:程序博客网 时间:2024/06/05 04:00
有一百万个数,是在1到一亿当中随机取值,找出这一亿个数中没出现的数,要求用最小的时间复杂度。
说下思想就行,我想到的就是遍历,但感觉太复杂了。
方案1:
用位图法
用一亿个bit来标记一个数是否出现。
比如出现了数字1024,那么就把1024位置1。
从1到一亿扫描,没有标记1的就是缺少的数字。
100000000/1024/1024=95.367431640625,不到96MB的内存。
一个int类型占32bit,需要3125000大小的int数组。(3125000*32=100000000)
说下思想就行,我想到的就是遍历,但感觉太复杂了。
方案1:
用位图法
用一亿个bit来标记一个数是否出现。
比如出现了数字1024,那么就把1024位置1。
从1到一亿扫描,没有标记1的就是缺少的数字。
100000000/1024/1024=95.367431640625,不到96MB的内存。
一个int类型占32bit,需要3125000大小的int数组。(3125000*32=100000000)
时间复杂度是O(一百万)+O(一亿)。
方案2:
因为2^32为40亿多,所以给定一个数可能在,也可能不在其中;这里我们把40亿个数中的每一个用32位的二进制来表示。假设这40亿个数开始放在一个文件中。
然后将这40亿个数分成两类:
1.最高位为0
2.最高位为1
并将这两类分别写入到两个文件中,其中一个文件中数的个数<=20亿,而另一个>=20亿(这相当于折半了);与要查找的数的最高位比较并接着进入相应的文件再查找。
再然后把这个文件为又分成两类:
1.次最高位为0
2.次最高位为1
并将这两类分别写入到两个文件中,其中一个文件中数的个数<=10亿,而另一个>=10亿(这相当于折半了); 与要查找的数的次最高位比较并接着进入相应的文件再查找。
.......
以此类推,就可以找到了,而且时间复杂度为O(logn)。
0 0
- 海量数据查找
- 海量数据查找中位数
- 海量数据查找中位数
- 海量数据中查找中位数
- 多线程生成海量数据和多线程海量数据查找
- 海量数据查找唯一数据问题
- 从海量数据中查找数据
- 海量数据排序和查找问题
- 一道阿里巴巴面试题--海量数据查找
- 一道阿里巴巴面试题--海量数据查找
- 关于海量数据查找排序问题
- 一道阿里巴巴面试题--海量数据查找
- 从海量数据中查找一个数
- 关于海量数据查找排序问题
- Bloom Filter 简介. 海量数据查找
- 关于海量数据查找排序问题
- 关于海量数据查找排序问题
- 关于海量数据查找排序问题
- fwrite、fflush、fileno、fsync
- android学习笔记1: AsyncTask使用
- WAS 6.1 的类加载
- Android WIFI热点默认安全性的修改方法
- git参考手册
- 海量数据查找
- http://www.soleilnoir.net/believein/#/start
- 如何利用 JConsole观察分析Java程序的运行,进行排错调优
- 国内云计算行业如何面对外资的大举入侵
- jpetstore学习(二)使用maven调试jpetstore项目
- 工作在Fundation框架下2——Start Developing iOS Apps Today——从今天开始开发IOS(IOS7版)系列源文档翻译(十六)
- Mysql日期函数总结
- 自己用Java写的简单生产者与消费者模型
- Android Layout各种布局