如何解决数据流中上下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 举报,一经查实,本站将立刻删除。