【问题标题】:Find running weighted median from a stream of values and weights从一系列值和权重中查找运行加权中位数
【发布时间】:2016-10-25 19:48:39
【问题描述】:

样本的加权中位数是 50% 加权百分位数(请参阅this post @ crossvalidated for more info)/

我想知道如何扩展用于找到详细 here 的运行数字流的中位数的算法(有两个堆,左侧的最小堆和右侧的最大堆)有效从double 值和权重的流中计算加权中位数。

我的一个想法是使用与从未加权的数字流计算中位数时相同的方法,但如果权重不是 1,则只需输入额外的值(例如,权重为 2 的值将插入两次)。但是,对于可以加倍的权重,这不能很好地扩展,而且似乎内存效率很低。

谢谢!

【问题讨论】:

    标签: algorithm heap median


    【解决方案1】:

    我最终实现了一个使用排序数组的方法(本质上提供最小堆的功能,但更容易搜索)并持续跟踪总权重的第 50 个百分位在哪里。我写了a blog post about it,里面有更深入的例子。

    【讨论】:

      【解决方案2】:

      一种复杂度为 O(nlogn) 的方法是将节点插入到增强的平衡二叉搜索树中。树将按值排序,树中的每个节点都将通过一个字段来增加所有子节点的总权重。

      插入一个新节点需要花费 O(logn),包括更新所有总权重字段。

      要查找中位数,您可以根据总重量除以 2 的目标重量下降树。此搜索将花费 O(logn)。

      【讨论】:

        猜你喜欢
        • 2018-07-02
        • 2019-01-08
        • 2018-02-24
        • 1970-01-01
        • 1970-01-01
        • 2015-08-26
        • 1970-01-01
        • 1970-01-01
        • 2021-10-13
        相关资源
        最近更新 更多