维基百科说: selectalgorithm:find最小值,最大值,最小值和最大值, 中值 ,甚至第k个最大元素都可以使用堆在线性时间内完成。 它所说的是,它可以做到,而不是如何。 你可以给我一些开始如何使用堆可以做到这一点?
是否有algorithm来估计一组值的中位数,模式,偏度和/或峰度,但不要求将所有的值一次存储在内存中? 我想计算一下基本的统计数据: 意思是:算术平均值 方差:平均偏差的平均值 标准偏差:方差的平方根 中值:将较大一半的数字与较小的一半分开的值 模式:在集合中find的最频繁的值 偏度:tl; 博士 峰度:tl; 博士 计算任何这些的基本公式是小学算术,我知道他们。 有很多统计库也可以实现它们。 我的问题是我正在处理的集合中有大量数值(数十亿):使用Python,我不能仅仅制作一个包含数十亿个元素的列表或哈希值。 即使我用C语言写这个,十亿个元素的数组也不太实际。 数据没有sorting。 它是由其他进程随机,随机产生的。 每一套的大小是非常可变的,大小不会事先知道。 我已经知道如何很好地处理均值和方差,以任何顺序遍历集合中的每个值。 (实际上,就我而言,我将它们按照生成顺序排列)。下面是我正在使用的algorithm, http : //en.wikipedia.org/wiki/Algorithms_for_calculating_variance#On-line_algorithm : 初始化三个variables:count,sum和sum_of_squares 对于每个值: 增量计数。 将该值添加到总和。 将值的平方加到sum_of_squares。 除数和存储为variables的意思。 按count计算sum_of_squares,作为variablesmean_of_squares存储。 正方形的意思是,存储为square_of_mean。 从mean_of_squares减去square_of_mean,作为方差存储。 产出均值和方差。 这种“在线”algorithm存在缺陷(例如,由于sum_of_squares快速增长大于整数范围或浮点精度),但基本上给了我所需要的,而不必在每个集合中存储每个值。 但我不知道是否有类似的技术来估计额外的统计数据(中位数,模式,偏度,峰度)。 只要处理N值所需的内存大大小于O(N),我就可以忍受一个有偏差的估计器,甚至是一个在一定程度上降低精度的方法。 如果图书馆具有计算一个或多个“联机”操作的function,指向现有的统计图书馆也将有所帮助。