查找数据流中的中位数——各种数据结构的效率比较

在数据流中查找中位数,需要动态容器保存。其中涉及到插入操作和查找操作。


查找数据流中的中位数——各种数据结构的效率比较_第1张图片

综上得知,采用AVL树和最大最小堆来实现是较为理想的。但是AVL树没有现成的函数库,需要自己实现,比较困难。但我们却可以利用C++的STL函数push_heap、pop_heap以及vector实现堆。

那么如何用最大堆和最小堆来寻找中位数呢?
思路是这样的,把数据流的数据分为前后两部分,前面一部分用最大堆实现,后面一部分用最小堆实现,并且最大堆的所有数都小于最小堆的最小值。最大堆的第一个数就是前一部分的最大值,最小堆的第一个数就是后一部分的最小值。中位数就是这两者的平均值(当数据总量为偶数时),或者两者其中之一(当数据总量为奇数时)。

你可能感兴趣的:(查找数据流中的中位数——各种数据结构的效率比较)