《编程珠玑》---找到缺失的整数(位图+二分)
来源:互联网 发布:淘宝怎么关闭私人定制 编辑:程序博客网 时间:2024/04/28 07:34
问题描述:从40亿个随机排列的32位整数中找到不存在文件中的整数;
根据题目的解析,这里我们缩小范围来举例,从8个随机排列的3位整数中找到不存在文件中的整数,假如我们放进的是(000, 001, 010, 011, 100, 111)缺少(101,110);
算法第一趟:(把起始位为0的整数读入到一个文件,把起始位为1的整数读入到另一个文件)。
文件1: 000, 001, 010, 011
文件2: 100, 111
由于是3位表示的整数,应当有2^3=8个整数,起始位为0,1的各占一半,由此记录两个文件中读入的数的个数,分别是4,2由此来看缺少的数应该存在于文件2类型的数,所以我们只对文件2进行操作,这里便是一个二分
算法第二趟:(以第二位开始同上一趟一样以0,1为区别进行区分)
文件21:100
文件22:111
按道理文件21和文件22都应该有2个数,但这里都只有1个,所以两个文件都存在缺失的数所以都要进行处理
算法第三趟(针对文件21): 区分方法以数位的第3位区分
文件211:100
文件212: 空 (这里可以判断缺少数101)
算法第四趟(针对文件22):
文件221:空 (可判断缺少数110)
文件222:111
由此缺少的两个数都被找了出来分别是101 和 110
位图的运用:由于40亿个数太大,需要40亿位来表示,所以需要采用位图压缩表示,一个int是32位,所以需要开2^(32-5)的数组大小来表示
0 0
- 《编程珠玑》---找到缺失的整数(位图+二分)
- 编程珠玑第一章位图排序扩展算法(可以排列包含负数的整数)
- 编程珠玑:位图排序海量整数
- 编程珠玑(一)位图
- 《编程珠玑》第二章三个问题A---查找40亿个32位整数中缺失的某个整数
- 【编程珠玑】位图排序
- 位图排序-《编程珠玑》
- 编程珠玑-位图
- [编程题]找出缺失的整数
- 《编程珠玑》第一章-位图排序
- 编程珠玑--位图法排序
- 位图算法(编程珠玑例题)
- 编程珠玑--位图法排序
- 腾讯--编程珠玑--位图法
- 编程珠玑-第一章--位图篇
- 编程珠玑--第一章使用位图
- 编程珠玑--位图法排序
- 编程珠玑--位图
- PDB文件:每个开发人员都必须知道的
- debian 安装ruby +nginx+apache开发环境.
- Android Activity 生命周期的透彻理解
- The installer encountered an error copying files to the hard disk: [Errno 5] Input/output error
- 一个canvas 事件demo
- 《编程珠玑》---找到缺失的整数(位图+二分)
- activity生命周期的onPause和onStop
- scala akka 修炼之路1(使用actor实现一个job的并发计算和task失败重启)
- 使用TOAD工具INSERT STATEMENTS方式导入导出表
- 跨越语言界线,微软将推出实时语音翻译「Skype Translator」
- 2014百度之星初赛第一轮解题报告:information
- android apk反编译
- 处理浏览器后退问题 和 监听组合键问题
- 2014百度之星初赛第一轮解题报告:party