每个数都可存,并且都是int , 但是总数n 太多。
想了两个: 1 ,首先扫一遍整个数据集,获得n的个数,n用string来保存。
2, 然后对n 做因子分解, 弄出( m * h ) , 大整数除法(需要多次)
3、 然后再扫一遍数据集,每 m 为一块,共h 块
缺点,扫两边数据集, 大整数除法要运算多次,而且因子分解不一定能成。
另一个:
1; 随意分块,假设10000个数分一块求均值, 然后剩下一个尾巴总和为W ,长度为wl ,同时用string保存总数 n ;
2; 前面均匀分块的数用mapreduce的可以求出均值avg1 ,
3; 实际要的均值
Avg = (avg1*(n-wl)+W) / n
= (avg1*n - avg1*wl +W)/n
=agv1 + ((W-avg1*wl)/n)
上面, avg1 , W, wl , W-avg1*wl 都是可求,唯一不可求的是n , 求出(W-avg1*wl)用string 保存,然后与保存 n 的string 做大整数除法。这样就只需要计算一次大整数。
|