由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 请教一道经典题目:寻找数据流中出现最频繁的k个元素
相关主题
static variable存在heap还是stack?问一下LeetCode JVM的Illegeal Parameter Exception
请教什么时候变量会被load进stack,什么时候进入heap呢?flash编程能在这里问么
问两个C++面世小问题天天嚷嚷这个 out 那个out的真是有病
再问C++初始化问题。现在湾区 雅图的公司用react得多对吧
一个查找算法题这样读多个文件对吗?
高人指点怎么在embedded sys(atmel 系列)上写内存管理 (转载)【求助】为什么类里面不能初始化vector的大小? (转载)
char s[]和char *ps的不同遇到一个怪问题
有否可以O(1)remove 一个元素的java LinkedList推荐?问个字符串的基本问题
相关话题的讨论汇总
话题: 元素话题: 数据流话题: top话题: hashmap
进入Programming版参与讨论
1 (共1页)
P****e
发帖数: 56
1
作为系统设计题,问: 寻找数据流中出现最频繁的k个元素(find top k frequent
items in a data stream)。注意是数据流,所以无法一下子知道所有数据。
https://soulmachine.gitbooks.io/system-design/content/cn/bigdata/heavy-
hitters.html
方案1: HashMap + Heap
用一个 HashMap,存放所有元素出现的次数,用一个小根堆,容量为k
,存放目前出现过的最频繁的k个元素,
每次从数据流来一个元素,如果在HashMap里已存在,则把对应的计数器增1,如果不存
在,则插入,计数器初始化为1
在堆里查找该元素,如果找到,把堆里的计数器也增1,并调整堆;如果没有找到,把
这个元素的次数跟堆顶元素比较,如果大于堆丁元素的出现次数,则把堆丁元素替换为
该元素,并调整堆
我知道这不是最优方案,但即使这个方案,也有两个问题:
1)
PriorityQueue只能给出最大值,如果要返回top K, 需要poll() (python 里叫pop())
K 次, 每次Poll() 都是把最大值去掉的。这样返回完top K, 这个 PriorityQueue也
就空了。 以后这个top K 数据就失去了?5分钟后又要返回最新的top K怎么办?
2)
假设K =3 , 如果我现在的PriorityQueue 有 10, 3, 8。 这时候来了一个9. 我用什么
操作能把3给踢了出去? 我如果就吧9插进去,这时候就有4个数字了,怎么知道最小的
是3? PriorityQueue只能知道最大的,不能知道最小的啊。
不胜求解还请指教
s********k
发帖数: 6180
2
求最大K,不是用大根堆,是小根堆,就是Top是这K个里面最小的。

k

【在 P****e 的大作中提到】
: 作为系统设计题,问: 寻找数据流中出现最频繁的k个元素(find top k frequent
: items in a data stream)。注意是数据流,所以无法一下子知道所有数据。
: https://soulmachine.gitbooks.io/system-design/content/cn/bigdata/heavy-
: hitters.html
: 方案1: HashMap + Heap
: 用一个 HashMap,存放所有元素出现的次数,用一个小根堆,容量为k
: ,存放目前出现过的最频繁的k个元素,
: 每次从数据流来一个元素,如果在HashMap里已存在,则把对应的计数器增1,如果不存
: 在,则插入,计数器初始化为1
: 在堆里查找该元素,如果找到,把堆里的计数器也增1,并调整堆;如果没有找到,把

P****e
发帖数: 56
3
明白了。确实是我没看仔细。可是如果用了最小堆,只能解决“每次来一个新的成员如
果比现有最小成员大,剔除现有最小成员,把新成员加入”的问题,要return top K,
每次要把这个堆的每个元素都pop()出来,这样一来这个堆不久摧毁了, 以后还要
return top K 怎么处理? 难道每次pop()出来,return top k, 再放回去?
还有,如果考虑数据量太大单机一个heap放不下,放入几个机器里做好几个heap,最后
汇总到另外一台机器上的global heap. 如果每个单机都用的是最小堆,怎么汇总? 汇
总时候难道不需要把每个单机上最大的item放到global heap上马?min heap 找最大
item 不又要吧所有item都pop() 掉?
1 (共1页)
进入Programming版参与讨论
相关主题
copy constructor问题。一个查找算法题
一道Microsoft的面试题高人指点怎么在embedded sys(atmel 系列)上写内存管理 (转载)
fstream 扫盲,谢谢!char s[]和char *ps的不同
大侠进来看看这个问题有否可以O(1)remove 一个元素的java LinkedList推荐?
static variable存在heap还是stack?问一下LeetCode JVM的Illegeal Parameter Exception
请教什么时候变量会被load进stack,什么时候进入heap呢?flash编程能在这里问么
问两个C++面世小问题天天嚷嚷这个 out 那个out的真是有病
再问C++初始化问题。现在湾区 雅图的公司用react得多对吧
相关话题的讨论汇总
话题: 元素话题: 数据流话题: top话题: hashmap