一个文件中有10G个整数,顺序不对,要求求中位数。
首先,64bite的整数足够存储10G的值。
那么换个说法,比如有20个数字,数字的范围是(1-10),内存只能容纳两个数字。使用内存中的这两个数字来计算(0,5)和(6,10)范围内的数字出现的次数。比如内存中两个数的值是4,16,显然中位数(姑且说求10位)出现在(6,10)。
此时,内存中两个数的统计范围变为(6,8)和(9,10),统计这两个范围内的个数出现的次数。如果是8,8,则中位数是(6,8)中第六次出现的数字。
第三次,内存中两个数的统计范围是(6,7)和(8)。如果是7,1,那么求的中位数仍然是(6,7)第六次出现的数。
根据第四次统计,内存的两个数是(6)和(7)。如果第一个内存数>;=6,则期望数为6,否则期望数为7。
这应该可以理解。