栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

从整数流中查找运行中位数

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

从整数流中查找运行中位数

从流数据中查找运行中位数有很多不同的解决方案,我将在答案的最后简要讨论它们。

问题是关于特定解决方案(最大堆/最小堆解决方案)的详细信息,下面说明基于堆的解决方案如何工作:

对于前两个元素,在左侧的maxHeap中添加较小的元素,在右侧的minHeap中添加较大的元素。然后一一处理流数据

Step 1: Add next item to one of the heaps   if next item is smaller than maxHeap root add it to maxHeap,   else add it to minHeapStep 2: Balance the heaps (after this step heaps will be either balanced or   one of them will contain 1 more item)   if number of elements in one of the heaps is greater than the other by   more than 1, remove the root element from the one containing more elements and   add to the other one

然后,您可以在任何给定时间像这样计算中位数:

   If the heaps contain equal amount of elements;     median = (root of maxHeap + root of minHeap)/2   Else     median = root of the heap with more elements

现在,我将按照答案开头所承诺的一般性地讨论这个问题。从数据流中找到运行中位数是一个难题,对于一般情况而言,有效地找到具有内存限制的 精确解决方案
可能是不可能的。另一方面,如果数据具有我们可以利用的某些特征,那么我们可以开发有效的专用解决方案。例如,如果我们知道数据是整数类型,则可以使用计数排序,这可以为您提供恒定的内存恒定时间算法。基于堆的解决方案是一种更通用的解决方案,因为它也可以用于其他数据类型(双精度)。最后,如果不需要精确的中位数并且近似值足够,则可以尝试估计数据的概率密度函数,然后使用该函数估计中位数。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/373826.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号