大数据查找------如何判断40亿个无符号整数是否存在某个数(无排序)
2016-08-01 08:58
435 查看
方案1:申请512M的内存(2^32/8=512MB),一个bit位代表一个unsigned int值。读入40亿个数,设置相应的bit位,读入要查询的数,查看相应bit位是否为1,为1表示存在,为0表示不存在。
方案2:因为2^32为40亿多,所以给定一个数可能在,也可能不在其中;这里我们把40亿个数中的每一个用32位的二进制来表示假设这40亿个数开始放在一个文件中。
然后将这40亿个数分成两类: 1. 最高位为0 2. 最高位为1
并将这两类分别写入到两个文件中,其中一个文件中数的个数<=20亿,而另一个>=20亿(这相当于折半了);与要查找的数的最高位比较并接着进入相应的文件再查找
再然后把这个文件为又分成两类: 1.次最高位为0 2.次最高位为1
并将这两类分别写入到两个文件中,其中一个文件中数的个数<=10亿,而另一个>=10亿(这相当于折半了); 与要查找的数的次最高位比较并接着进入相应的文件再查找。 ....... 以此类推,就可以找到了,而且时间复杂度为O(logn)。
方案2:因为2^32为40亿多,所以给定一个数可能在,也可能不在其中;这里我们把40亿个数中的每一个用32位的二进制来表示假设这40亿个数开始放在一个文件中。
然后将这40亿个数分成两类: 1. 最高位为0 2. 最高位为1
并将这两类分别写入到两个文件中,其中一个文件中数的个数<=20亿,而另一个>=20亿(这相当于折半了);与要查找的数的最高位比较并接着进入相应的文件再查找
再然后把这个文件为又分成两类: 1.次最高位为0 2.次最高位为1
并将这两类分别写入到两个文件中,其中一个文件中数的个数<=10亿,而另一个>=10亿(这相当于折半了); 与要查找的数的次最高位比较并接着进入相应的文件再查找。 ....... 以此类推,就可以找到了,而且时间复杂度为O(logn)。
相关文章推荐
- 如何判断传过来的JSON数据中,某个字段是否存在
- 如何判断某个数据表是否存在
- 面试题:给40亿个不重复的无符号整数,没排过序,给一个无符号整数如何快速判断这个数是否在这40亿个数中
- 一月十日练习习题,1数组数据存入字典并输出2降序 和倒叙 输出数组中内容3对字符串当中信息进行查找是否存在4 把数组当中信息按照中文排序
- JS中如何判断JSON数据是否存在某字段
- mysql创建数据表时如何判断是否已经存在?
- mysql创建数据表时如何判断是否已经存在?
- JS中如何判断JSON数据是否存在某字段
- JS中如何判断传过来的JSON数据中是否存在某字段
- mysql创建数据表时如何判断是否已经存在?
- 如何判断ACCESS数据表中的某条记录是否存在
- 如何判断数据中某张表是否存在
- indexOf() 如何判断一个元素在指定数组中是否存在? 找出指定元素出现的所有位置? indexOf()方法 是正序查找,lastIndexOf()是倒叙查找
- mysql中如何判断 一个数据表是否已经存在
- JS中如何判断传过来的JSON数据中是否存在某字段
- 如何判断传过来的JSON数据中,某个字段是否存在
- 给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。 【腾讯】
- sas 判断数据集是否存在及如何用sas代码关闭已打开的数据集
- 哈希变形—位图(给定40亿个不重复的无符号数整数,没排过序,给一个无符号整数,如何快速判断一个数是否在这40亿个数中)
- 如何判断数据库中是否存在一个数据表