由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - [朋友面的G]Find k largest element in sliding window
相关主题
大意了,尼玛sliding windows中维持topk频繁的query
An interview question of finding the median in a moving window.MS一道onsite面题 白板coding
算法题:min heap inplace变 BST一道题:2个BST,按大小顺序打印两棵树的所有节点
【什么时候需要做heap, 什么时候需要做BST】Google phone interview
题:无限数据流获取第k%的数弱问C++用heap的题能用multiset吗
请教一道题 median iiamazon question
问一道算法题,find min in the last k elementsgoogle电面
A电面题amazon一面面经
相关话题的讨论汇总
话题: bst话题: int话题: window话题: top话题: heap
进入JobHunting版参与讨论
1 (共1页)
z**********e
发帖数: 12
1
http://articles.leetcode.com/2011/01/sliding-window-maximum.htm
这个题目变种,如果不是找最大值,而是找这个window的top K elements, (打出所
有的top k),window size is N, assume k < N, array is a integer stream. 可以
有O(N)解法吗? 朋友式常规的NlgK, 用min heap.
多谢。
z**********e
发帖数: 12
2
顶一下
z***m
发帖数: 1602
3
用min heap不行吧,当出了左边window boundary,就必须从heap里删掉,即使是全局
最大的
z**********e
发帖数: 12
4
你说的是对的。应该是当时听得时候马马虎虎,min heap O(NlgK)是不行的。
比如
{1, 3, -1,0, 5, -2, 6, 7} K = 2, window size (W) = 4, N is the size of
the stream
{1, 3, [-1,0, 5, -2], 6, 7}
基本上每一次都要重新扫一遍window,O(N* WlgK) 的解法。。
感觉这样弱爆了啊

【在 z***m 的大作中提到】
: 用min heap不行吧,当出了左边window boundary,就必须从heap里删掉,即使是全局
: 最大的

P******r
发帖数: 1342
5
是不是该用BST. 进window就add,出window就remove
y*****h
发帖数: 97
6
Data mining里有lossy的算法,你去搜top k data stream 三大类方法
z***m
发帖数: 1602
7
是top k 还是top K frequent啊?

【在 y*****h 的大作中提到】
: Data mining里有lossy的算法,你去搜top k data stream 三大类方法
s*******h
发帖数: 105
8
和mean差不多吧,用两个tree? 一个存前k,另一个存w-k,然后就可以进进出出了,这
样可以N*lng(K)吧。
g****v
发帖数: 971
9
circular array 来keep这个window。
BST来找top k。
如果更快的话可以hashmap下array的element 到 BST
heap不行的原因是删除的时候麻烦。
a*****2
发帖数: 96
10
circular buffer + hashmap + sorted double linkedlist
相关主题
请教一道题 median iisliding windows中维持topk频繁的query
问一道算法题,find min in the last k elementsMS一道onsite面题 白板coding
A电面题一道题:2个BST,按大小顺序打印两棵树的所有节点
进入JobHunting版参与讨论
z**********e
发帖数: 12
11
是top k,not top k frequent

【在 z***m 的大作中提到】
: 是top k 还是top K frequent啊?
z**********e
发帖数: 12
12
不行的,你要把top k大的树打出来,遍历第一个树也是k,所以你的是N*K*LgK

【在 s*******h 的大作中提到】
: 和mean差不多吧,用两个tree? 一个存前k,另一个存w-k,然后就可以进进出出了,这
: 样可以N*lng(K)吧。

z**********e
发帖数: 12
13
assume 你的bst是W,打出top需要K,所以你的复杂度还是N*K*lgW

【在 g****v 的大作中提到】
: circular array 来keep这个window。
: BST来找top k。
: 如果更快的话可以hashmap下array的element 到 BST
: heap不行的原因是删除的时候麻烦。

z**********e
发帖数: 12
14
Lossy感觉就是一个counting sort的算法?这里怎么能有效解决top k大的数呢?不是
top k 频繁的数

【在 y*****h 的大作中提到】
: Data mining里有lossy的算法,你去搜top k data stream 三大类方法
z**********e
发帖数: 12
15
你的也是N*K*lgW吧

【在 a*****2 的大作中提到】
: circular buffer + hashmap + sorted double linkedlist
P******r
发帖数: 1342
16
你考虑对sliding window有特别的考虑了吗?
如果样本一共X个,那用min heap就是 X*N*logK.
用BST的话,就是X*(logN + K). logN是用来插到树里,K是用来打印

:你的也是N*K*lgW吧
:【 在 asd2002 (大王) 的大作中提到: 】
i*********t
发帖数: 16
17
sliding window 扫一边的话,top K 与整个数组的top K不是一模一样么。看不
出sliding window 在这种情况下有啥区别。

【在 z**********e 的大作中提到】
: http://articles.leetcode.com/2011/01/sliding-window-maximum.htm
: 这个题目变种,如果不是找最大值,而是找这个window的top K elements, (打出所
: 有的top k),window size is N, assume k < N, array is a integer stream. 可以
: 有O(N)解法吗? 朋友式常规的NlgK, 用min heap.
: 多谢。

i*******e
发帖数: 7
18
这个问题有两个操作,一个是push a new element from stream into the data
strucutre, 另一个是print the current top K elements。你的O(N)要求是哪个操作
?如果是第二个话前面的circular buffer + hashmap + sorted double linkedlist完
全可以的吧,只要O(K),只不过就是在第一个操作时候insert new element时候代价较
大, O(N), 如果dbllinkedlist换成heap的话insert时候能省不少时间,print时候就变
成 log(N*(N-1)...*(N-K)) => O(Klog(N)). 不知道这样想对不对?
f******5
发帖数: 104
19
BST, O (n*(logW+k))
void printBST(multiset > &BST, int k){
int i=0;
multiset >::iterator it=BST.begin();
for(;i cout<<(*it)<<",";
++it;
}
cout< }
void topK_SlideWindow(vector &A, int w, int k){
//use BST tree to record w elems in the windows.
//update BST, add new elem into BST, and delete old elem.
assert(A.size()>=w&&k<=w);
multiset >BST;
for(int i=0;i BST.insert(A[i]);
}
printBST(BST, k);
for(int i=w;i auto it=BST.find(A[i-w]);
BST.erase(it);
BST.insert(A[i]);
printBST(BST,k);
}

}
t*******e
发帖数: 274
20

这个方法具体怎么实现?

【在 a*****2 的大作中提到】
: circular buffer + hashmap + sorted double linkedlist
相关主题
Google phone interviewgoogle电面
弱问C++用heap的题能用multiset吗amazon一面面经
amazon question几道关于数据结构的面试题。
进入JobHunting版参与讨论
x*****n
发帖数: 195
21
BST删除和添加元素也要调整,不如heap来得快。

【在 g****v 的大作中提到】
: circular array 来keep这个window。
: BST来找top k。
: 如果更快的话可以hashmap下array的element 到 BST
: heap不行的原因是删除的时候麻烦。

c****8
发帖数: 76
22
如果是Java的话,TreeSet (BST)不允许duplicates,那怎么办呢?

【在 f******5 的大作中提到】
: BST, O (n*(logW+k))
: void printBST(multiset > &BST, int k){
: int i=0;
: multiset >::iterator it=BST.begin();
: for(;i: cout<<(*it)<<",";
: ++it;
: }
: cout<: }

c******n
发帖数: 4965
23
怎么讨论这么长还是不着边?
lint code. 上有基本是原题
sliding window median. max heap plus mean heap

【在 z**********e 的大作中提到】
: http://articles.leetcode.com/2011/01/sliding-window-maximum.htm
: 这个题目变种,如果不是找最大值,而是找这个window的top K elements, (打出所
: 有的top k),window size is N, assume k < N, array is a integer stream. 可以
: 有O(N)解法吗? 朋友式常规的NlgK, 用min heap.
: 多谢。

1 (共1页)
进入JobHunting版参与讨论
相关主题
amazon一面面经题:无限数据流获取第k%的数
几道关于数据结构的面试题。请教一道题 median ii
也上一道算法题了(俺的版权了:))问一道算法题,find min in the last k elements
M5 Network && Microstrategy 面经A电面题
大意了,尼玛sliding windows中维持topk频繁的query
An interview question of finding the median in a moving window.MS一道onsite面题 白板coding
算法题:min heap inplace变 BST一道题:2个BST,按大小顺序打印两棵树的所有节点
【什么时候需要做heap, 什么时候需要做BST】Google phone interview
相关话题的讨论汇总
话题: bst话题: int话题: window话题: top话题: heap