返回信息流面试时被问到找数据流中的中位数,也就是LeetCode第295题https://leetcode.com/problems/find-median-from-data-stream,我们知道这道题最常用的方法是用两个堆,但面试官要求是数据量很大,所以不得不用多个机器处理这一个数据量,请问算法怎么写,我一下子蒙圈了,所以来求教下大家该怎么写
这是一条镜像帖。来源:北邮人论坛 / acm-icpc / #97520同步于 2019/1/23
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ACM_ICPC机器人发帖
用多个机器寻找数据流中的中位数,如何写算法
PMS
2019/1/23镜像同步30 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
我想的是比如每个机器都维护一个排序二叉树,支持插入一个数x和查询这个二叉树中小于x的数的数量。
在数据流中出现一个数之后,随便把这个数插入到某一个机器的二叉树里面。
查询的时候,二分地枚举答案x,查询每个机器中小于x的数的数量。
但我觉得还是楼上的方法更简单一些[ema41]
【 在 PMS 的大作中提到: 】
:
: 能再具体说说吗
【 在 a940100079 的大作中提到: 】
: 多个机器,每个机器存储不同区间的数字
: 然后找到对应区间
: 然后去区间机器用堆找中位数?
太感谢了,我觉得你的方法最对了
【 在 Rclover 的大作中提到: 】
: 我想的是比如每个机器都维护一个排序二叉树,支持插入一个数x和查询这个二叉树中小于x的数的数量。
: 在数据流中出现一个数之后,随便把这个数插入到某一个机器的二叉树里面。
: 查询的时候,二分地枚举答案x,查询每个机器中小于x的数的数量。
: ...................
太感谢了,确实我也觉得楼上的方法实现起来更简单些
这个方法实现简单 但是感觉负载均衡做起来很难
【 在 a940100079 的大作中提到: 】
: 多个机器,每个机器存储不同区间的数字
: 然后找到对应区间
: 然后去区间机器用堆找中位数?