编程珠玑(第二版) 第二章 问题A

问题A:

给定一个最多包含40亿个随机排列的32位整数的顺序文件,找出一个不在文件中的32位整数(在文件中至少缺失一个这样的数--为什么?)。在有足够内存的情况下,如何解决该问题?如果有几个外部的“临时”文件可用,但是仅有几百字节的内存,又该如何解决?

分析:

问题与第一章“开篇”类似,只是数目由1千万变成了40亿,并且没有说明这40亿个数字是否重复。

1.文件中至少缺失一个这样的数:因为4,000,000,000 < 4,294,967,295(2^32-1)。

2.阅读过第一章可知:遍历文件并存储于位图,然后循环测试,得到第一个测试值为0的索引即可。位图表示:int bitmap[2^32/2^4],即需要625MB内存。由于目的不是排序,在此跟数字重复与否无关。

3.使用二分搜索技术。参考:编程珠玑第二章问题A

你可能感兴趣的:(编程技术,在一种语言上编程,编程珠玑,算法,二分搜索,位图)