美文网首页
Python实现数据流中的中位数【堆】

Python实现数据流中的中位数【堆】

作者: Gxxx_xx | 来源:发表于2018-06-10 16:57 被阅读0次

    题目描述

    如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。

    这一题的思路主要在于堆,本猪之前之前都不知道堆是什么。。更不知道大小堆的概念。。故这里仅看懂了思路,但是并没能够重现出来,因为并没有看懂如何维护堆,故在此留坑,看明白如何维护堆的时候,再另作整理。以下为答案:

    构建一个最大堆和一个最小堆,分别存储比中位数小的数和大的数。当目前两堆总数为偶数的时候,把数字存入最大堆,然后重排最大堆,如果最大堆的堆顶数字大于最小堆堆顶数字,则把两个堆顶数字交换,重排两堆,此时两堆数字总数为奇数,直接输出最大堆堆顶数字即为中位数;如果当前两堆总数为技术的时候,把数字存入最小堆,重排最小堆,如果最大堆的堆顶数字大于最小堆堆顶数字,则把两个堆顶数字交换,重排两堆,此时两堆数字总数为偶数,取两堆堆顶数字做平均即为中位数。

    在此先码一点堆的基本概念:

    (英语:heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质:

    (1)堆中某个节点的值总是不大于或不小于其父节点的值;

    (2)堆总是一棵完全二叉树。

    【最大堆】将根节点最大的堆叫做最大堆或大根堆

    【最小堆】根节点最小的堆叫做最小堆或小根堆

    相关文章

      网友评论

          本文标题:Python实现数据流中的中位数【堆】

          本文链接:https://www.haomeiwen.com/subject/pkxqeftx.html