解法:首先假设是32位无符号整数
1. 读一遍10G个整数,把整数映射到256M个区段中用一个64位无符号整数给每个相应区段记数。
说 明:整数范围是0 - 2^32 - 1一共有4G种取值,映射到256M个区段则每个区段有16(4G/256M = 16)种值,每16个值算一段 0~15是第1段,16~31是第2段……2^32-16 ~2^32-1是第256M段。一个64位无符号整数最大值是0~8G-1这里先不考虑溢出的情況。总共占用内存256M×8B=2GB
2. 从前到后对每一段的计数累加,当累加的和超过5G时停止找出这个区段(即累加停止时达到的区段,也是中位数所茬的区段)的数值范围设为[a,a+15]同时记录累加到前一个区段的总数,设为m然后,释放除这个区段占用的内存
3. 再读一遍10G个整数,把在[aa+15]内的每个值计数,即有16个计数
4. 对新的计数依次累加,每次的和设为n当m+n的值超过5G时停止,此时的这个计数所对应的数就是中位数
内容提示:掌握100以内数的进位加法与退位减法的计算方法
文档格式:DOC| 浏览次数:206| 上传日期: 18:45:01| 文档星级:?????
全文阅读已结束如果下载本文需要使用