微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

数据流中上下5%的元素

如何解决数据流中上下5%的元素

给出数字输入流, 最后一个k值的平均值是必需的,在计算中, 必须删除k个数字的top5%和bottom5%。

我们可以在线性时间内做到吗?一个O(n log k)解决方案将通过使用优先级队列来解决,但我无法想到更理想的解决方案。

解决方法

这是O(n log(k))方法。我使用了 deque 来按输入顺序保存最后的k值,并使用了 ordered set 来维护最后的k值的排序版本:

deque<T> d;
set<T> s;   // e.g.,red-black tree
for each new value x {
     d.push_back(x);
     s.insert(x);
     if (d.size() > k) {
         old = d.front(); d.pop_front();
         s.erase(old);
         // s holds sorted k-values
         // traverse to find mean
         // traverse in order,pass over the first and last 0.05*k values
     }
}     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。