您的位置:首页 > 编程语言 > Go语言

Algorithm_最大堆最小堆来求中位数

2014-08-07 19:38 246 查看
参考文章
http://yaronspace.cn/blog/archives/1306
利用堆来实现前k个元素已经不稀奇了。对于实现中位数的方法了?因为n的大小一直在变化,所以如果定义k=n/2,k也是不确定的。所以一个堆的方法就显得不可行了。

由此我觉得文章中的这种方法是很赞的。

两个堆,一个最大堆来实现储存比中位数m小或者相等的值,一个最小堆来储存比m大或者相等的值,当有新的数进来,根据与m的关系,大于m的值放到最小堆,小于m的值放到最大堆。当两个堆的元素个数差值大于1时,就表明,中位数变了,不是原来的m,这时候应该把m插入到元素个数小的堆中,然后从元素个数多的堆中取出最大或者最小的元素出来当做m
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: