`
zwhc
  • 浏览: 258877 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

10 亿个数取中位数

阅读更多
10 亿个数取中位数
1、取 16*1024 个数,生成一个 TreeMap 。取得最大值 max 和最小值 min。
2、构造一个1024个元素的计数数组 T[i],对最初的 1024 个数按区间计数;
对 min 和 max 进行 1024 个等分,各等分值为 N[i]。

当数据 N[a]<data<=N[a+1] 时, T[a]++;

3、将大于 N[512-8] 且小于 N[512+8] 的数放入一个新的 TreeMap。

4、开始读取之后的数据,执行2 和 3的操作;

5、根据区间计数,获知中位数处于N[x]区间。
如果正好处于 N[512-8] 且小于 N[512+8],则可以直接查询数据。
否则,重新读取一次数据,将处于 N[x] 区间的数,放入一个 TreeMap 中,获得中位数。

6、如果某个区间的数据量超过 200万,则对该区间进行分区,分成 1024 个区,并进行计数。


嗯嗯,计数要智能一些,可以分拆、合并计数据区间。最大值最小值要随时取。

唔唔,有空将代码写出来试试。不知道是否可行。
0
0
分享到:
评论
3 楼 zwhc 2010-04-03  
分区计数应该是正解。

具体算法如下:
1、开始时取2个数,以其平均值为界分成2个区间,此时对最多4个数进行分区计数;
变量:区间数用 Q 表示,分区计数用 N[i] 表示。

2、将数据按大小,放入相应的区间;每放入一个,N[i]++;

3、当某个区间里的数字个数大于分区数时,即 N[i] >= Q,则生成新的分区对新数据进行计数;
新分区有如下属性;

a、分区数*2 ,因为区间里的数字个数不大于分区数,所以新分区最多可
对 Q*Q 个数进行计数,

b、以之前所有数的最大值和最小值进行等分;即,遍历数据时,要保存最大值和最小值;

4、各组分区与最大可计数的数据列表
Q   Q*Q
2    4
4    16
8    64
16   256
32   1024
64   4K
128  16K
256  64K
512  256K
1024 1M
2K   4M
4K   16M
8K   64M
16K  256M
32K  1G
64K  4G
128K 16G
256K 64G
512K 256G

唔,这种算法有个缺陷:如果最大数和最小数相差很大,数据集中在一块,会有很多无效的分区,因此效率不高。

如果数据平均分布,这是个好办法。不过。。。嗯嗯,这种情况太少了。

==============================================================

分区计数应该是正解。

上面一种算法不好用,做一些改进。

具体算法如下:
1、开始时取2个数,以其平均值为界分成2个区间,此时对最多4个数进行分区计数;
变量:区间数用 Q 表示,分区计数用 N[i] 表示。

2、将数据按大小,放入相应的区间;每放入一个,N[i]++;

3、当某个区间里的数字个数大于分区数时,即 N[i] >= Q,则在该分区下,生成两个子分区对新数据进行计数;
子分区有如下属性;

a、以父分区的最大值和最小值的平均值分成两个分区
b、每个子分区可计数的量为父分区的两倍;

唔,这种算法应该比较好。
2 楼 zwhc 2010-04-03  
分区计数应该是正解。

具体算法如下:
1、开始时取2个数,以其平均值为界分成2个区间,此时对最多4个数进行分区计数;
变量:区间数用 Q 表示,分区计数用 N[i] 表示。

2、将数据按大小,放入相应的区间;每放入一个,N[i]++;

3、当某个区间里的数字个数大于分区数时,即 N[i] >= Q,则生成新的分区对新数据进行计数;
分区扩展时,按如下方式进行扩展;

a、分区数*2 ,因为区间里的数字个数不大于分区数,所以新分区最多可
对 Q*Q 个数进行计数,

b、以之前所有数的最大值和最小值进行等分;即,遍历数据时,要保存最大值和最小值;

4、各组分区与最大可计数的数据列表
Q   Q*Q
2    4
4    16
8    64
16   256
32   1024
64   4K
128  16K
256  64K
512  256K
1024 1M
2K   4M
4K   16M
8K   64M
16K  256M
32K  1G
64K  4G
128K 16G
256K 64G
512K 256G

唔,这种算法有个缺陷:如果最大数和最小数相差很大,数据集中在一块,会导致一直分区下去。

如果数据平均分布,这是个好办法。不过。。。嗯嗯,这种情况太少了。
1 楼 zwhc 2010-04-03  
2 4
4 16
8 64
16 256
32 1024
64 4k
128 16k
256 64k
512 256k
1024 1M
......

相关推荐

    数据的分析.pdf

    【课标要求】 考点 课标要求 知识与技能目标 了解 理解 掌握 灵活 应用 总体、个 体、样本、 样本容量 了解总体、个体、样本 、样 本容量等概念的意义 平均数、众 数、中位数 理解平均数、加权平均数的 意义,会求一...

    人教版四年级数学下册期末测试卷 (1).doc

    人教版小学四年级数学下册试题 题号 一 二 三 四 五 六 总分 得分 一、认真思考,仔细填空。22分 1.97.0103读作( ),五十点五零写作( )。...10.一个两位小数取近似值后是3.8,这个数最大是( ),最小是

    程序员二进制计算器 v1.36

    (2)以W(万)、Y(亿)、WY(万亿)、YY(亿亿)、WYY(万亿亿)、YYY(亿亿亿)为单位输出 %num %num对结果以万、亿等为单位输出,用于便捷得到一个大数的值,格式符合中国人的习惯: 当结果万时,原样输出,...

    大数据面试题(2).docx

    然后扫描这2.5亿个整数,查看Bitmap中相对应位,如果是00变01,01变10,10保持不变。所描完事后,查看bitmap,把对应位是01的整数输出即可。 方案2:也可采用上题类似的方法,进行划分小文件的方法。然后

    JAVA大数据处理题.pdf

    然后扫描这2.5亿个整数,查看Bitmap中相对应位,如果是00变01,01变10,10保持不变。所描完事后,查看bitmap,把对应位是01的整数 输出即可。 ⽅案2:也可采⽤上题类似的⽅法,进⾏划分⼩⽂件的⽅法。然后在⼩⽂件...

    人教版四年级数学下册期末测试卷 (6).doc

    9、一个两位小数取近似值后是3.8,这个数最大是( ),最小是( )。 10、2.15小时=( )小时( )分 3.05千克=( )千克( )克 二、“对号入座”选一选。(选出正确答案的编号填在括号里)(5分) 1、下面正确的...

    几道大数据面试题.pdf

    ⼏道⼤数据⾯试题 ⼏道⼤数据⾯试题 ⾸先处理⼤数据的⾯试题,有些基本概念要清楚: (1)1Gb = 109bytes(1Gb = 10亿字节):1Gb = 1024Mb,1Mb = 1024Kb,1Kb = 1024bytes; (2)基本流程是,分解⼤问题,解决⼩...

    整理后java开发全套达内学习笔记(含练习)

    int 32bit, -2^31~2^31-1 (2147483648,20亿,10位有效数字) long 64bit, -2^63~2^63-1 (900亿亿,20位有效数字) float 32bit, 9位有效数字,含小数(四舍五入)(小数点算一位,正负号不算) double 64bit, 18位...

    世界500强面试题.pdf

    1.5.6. 输入两个整数 n 和 m,从数列 1,2,3.......n 中 随意取几个数 ....... 116 1.5.7. 输入一个表示整数的字符串,把该字符串转换成整数并输出.............. 118 1.5.8. 给出一个数列,找出其中最长的单调...

    《青少年网络安全》教育培训ppt.pptx

    通过在变电站各类保护小室、10KV 开关室、35KV 开关室内安装轨道式摄像机,变电站智能辅助监控系统可以远程对轨道摄像机进 控制操作,可以实时获取每个控制(保护、高压)柜上的所有监控信息,实时上 传中心主站。...

    中职计算机应用基础新PPT教案.pptx

    目前最快的巨型机每秒能进行数百万亿次运算。 (2)计算精度高。计算机内部采用二进制运算,数值计算非常精确,一般有效数字可以达到十几位。 (3)具有记忆和逻辑判断功能。计算机的存储设备可以把原始数据、中间结果、...

    人工智能发展报告.docx

    2016年底,新版AlphaGo又化 名网络棋手 Master 对战包括 10 多位中韩世界冠军在内的棋手, 豪取 60 连胜; 2017 年初,卡内基梅隆大学人工智能系统 Libratus 打败 4 名世界顶级德州扑克玩家, 这些事件再次引发了...

Global site tag (gtag.js) - Google Analytics