由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 【facebook面试题】求一段时间内出现最多的ip address(es)
相关主题
问一道题目google 一题
求教一道面试题问个google面试题(3)
web count 设计微软onsite面经
G家电面题,求解答‏Ask a google interview question
问一道刚面试完的algorithm 的题, 面试官非要最优解,我想不出来啊[teradata面经] hadoop engineer
请教几个面试问题面试题:写一个猜单词策略
Data Structure 一题.问一道最新G面题
问道C内存的题?一道关于trie的题目
相关话题的讨论汇总
话题: ip话题: count话题: heap话题: trie话题: lru
进入JobHunting版参与讨论
1 (共1页)
g*****e
发帖数: 282
1
没想出太好的答案,答用heap和hash所以ip addr。用heap操作cost很高,hash所以
ipv4 addr很expensive。不知道是open question还是有标准答案的。
大意是某公司gateway记录着所有connection的外部ip addresses,比如保留最多24hr
,不断更新。现在求给定时间过去k sec内出现最多的n个ip address(es),k可以为60s
,600s,3600s,n=1,10,100,etc。设计高效算法和数据结构。
c***2
发帖数: 838
2
LRU + Counting Buckets?
g*****e
发帖数: 282
3
LRU主要是来做cache的。用在这里的话就只能求出近似解了。而且维护LRU的数据结构
本来是heap或者sorted tree吧?
主要是维护这个heap得保存k时间里面的所有出现过的ip addr,差不多就是随时间推移
不断地在reconstruct这个heap。否则我觉得用heap已经很不错了。

【在 c***2 的大作中提到】
: LRU + Counting Buckets?
j********x
发帖数: 2330
4
range minimum query
l**********3
发帖数: 161
5
可不可以用一个4G个元素的counter数组,每个数组存一个long,每次access就累加这
个数组。如果query的时候,用min heap做一个linear search,找出n个最多的地址。
如果要优化search的话,用一个什么bitmap记录一段IP range,如果有访问的话,就是
1,否则是0,像个索引,这样可以跳过很多0。
不知道可不可行,大家讨论一下。
g*****e
发帖数: 282
6
你说的4g是把ipv4所有addr记录一个counter,查counter值是O(1)操作不需要优化了。
或者这个search优化我理解错了:P 我觉得这里麻烦的是维护那个heap。
楼上的range min requery怎么理解?想不出转化模型。。。

【在 l**********3 的大作中提到】
: 可不可以用一个4G个元素的counter数组,每个数组存一个long,每次access就累加这
: 个数组。如果query的时候,用min heap做一个linear search,找出n个最多的地址。
: 如果要优化search的话,用一个什么bitmap记录一段IP range,如果有访问的话,就是
: 1,否则是0,像个索引,这样可以跳过很多0。
: 不知道可不可行,大家讨论一下。

a****9
发帖数: 418
7
可以参考data streaming algorithm中的detect elephant flows
主要idea是靠sampling

24hr
60s

【在 g*****e 的大作中提到】
: 没想出太好的答案,答用heap和hash所以ip addr。用heap操作cost很高,hash所以
: ipv4 addr很expensive。不知道是open question还是有标准答案的。
: 大意是某公司gateway记录着所有connection的外部ip addresses,比如保留最多24hr
: ,不断更新。现在求给定时间过去k sec内出现最多的n个ip address(es),k可以为60s
: ,600s,3600s,n=1,10,100,etc。设计高效算法和数据结构。

j********x
发帖数: 2330
8
时间区间任意,求取的最多ip数任意的情况下,问题转化为如何快速获取任意
给定时间区间里,某ip出现的次数;这样看,如果不引入随机误差,是不可能
有良好的性能吧。。。

高,hash所有
的。
比如保留最多24hr
address(es),k可以为60s

【在 g*****e 的大作中提到】
: 没想出太好的答案,答用heap和hash所以ip addr。用heap操作cost很高,hash所以
: ipv4 addr很expensive。不知道是open question还是有标准答案的。
: 大意是某公司gateway记录着所有connection的外部ip addresses,比如保留最多24hr
: ,不断更新。现在求给定时间过去k sec内出现最多的n个ip address(es),k可以为60s
: ,600s,3600s,n=1,10,100,etc。设计高效算法和数据结构。

c********n
发帖数: 26
9
这道题有没有什么比较可行的solution啊?
y*******g
发帖数: 6599
10
ipv4 addr有什么好hash的?本身就是一个整数啊

24hr
60s

【在 g*****e 的大作中提到】
: 没想出太好的答案,答用heap和hash所以ip addr。用heap操作cost很高,hash所以
: ipv4 addr很expensive。不知道是open question还是有标准答案的。
: 大意是某公司gateway记录着所有connection的外部ip addresses,比如保留最多24hr
: ,不断更新。现在求给定时间过去k sec内出现最多的n个ip address(es),k可以为60s
: ,600s,3600s,n=1,10,100,etc。设计高效算法和数据结构。

z****t
发帖数: 1090
11
能不能用Trie. 可以每个结点存IP地址中的一个数字,总共也就4或6层。 每个叶子
存着一个IP地址的count
顺着读一遍输入,建这个树。 然后再在这个树上找出现最多的ip地址。 可能优势是找
某个IP的count快, 缺点是还得列出所有的count,才能知道哪些是出现最多的IP。
l*****a
发帖数: 14598
12
我的想法根你差不多。
用这个Trie记录每个IP的访问次数及访问时间的list,
###为了提高一点效率,我还希望有这个list的tail pointer so that i can add new
items
directly.
now the Trie will contain all the access information in the past
24Hours.
we need to add a timer function for the Trie to refresh the trie
frequently to remove expired data and update access count for each IP.
each time there is a request come,
I will
1)Make a copy of the whole Trie
2)scan the whole trie,remove the expired access from the head of list
for each IP,adjust the access count
3) Use a max heap (size as request) to store the access count for each
IP

【在 z****t 的大作中提到】
: 能不能用Trie. 可以每个结点存IP地址中的一个数字,总共也就4或6层。 每个叶子
: 存着一个IP地址的count
: 顺着读一遍输入,建这个树。 然后再在这个树上找出现最多的ip地址。 可能优势是找
: 某个IP的count快, 缺点是还得列出所有的count,才能知道哪些是出现最多的IP。

c******n
发帖数: 4965
13
我觉得你是题目没听明白。
如果是要continuously calculate this, 就是online algorithm, 后面来那个IP,

知道? 最简单就是用个2^32 bit 的hash, 记录count, 但是没有那么大内存的话,就是
要用
更小的cache 来近似,就是LRU 之类的概念,但这里谁知道后面的IP incoming
pattern?
LRU mem cache 如果没有hit 无所谓, 就是个lower performance, 你这个题如果不
hit,
就错了。 比如, 如果用keep largest count IP,
you have only 4 mem cells to record the map.
you have incoming sequence:
a a b b c c d d e e e e e e
before "e" comes, all cells are taken, and have count 2, then e has no
count yet, so it will never enter into the map.
如果有2^32 map size, 那就
void OnInComingIP(int IP) {
all_IP_count{IP}++ ;
max_count_heap.insert(key=>all_IP_count{IP}, payload=>IP);
}
where max_count_heap has a size of n
the above is not quite right.
the problem is that the all_IP_count should be a count of the number
of occurances within the last K seconds. so that means , whenever
clock advances one second, we have to scan the entire all_IP_count
map, and purge the counts older than the window. so it can't be a ++,
but should be
all_IP_count{IP}.append(currentTime());
but still, upating the map every second , and updating the heap, is
still costly

24hr
60s

【在 g*****e 的大作中提到】
: 没想出太好的答案,答用heap和hash所以ip addr。用heap操作cost很高,hash所以
: ipv4 addr很expensive。不知道是open question还是有标准答案的。
: 大意是某公司gateway记录着所有connection的外部ip addresses,比如保留最多24hr
: ,不断更新。现在求给定时间过去k sec内出现最多的n个ip address(es),k可以为60s
: ,600s,3600s,n=1,10,100,etc。设计高效算法和数据结构。

g*********s
发帖数: 1782
14
为何hash ipv4很贵?比任意长的字符串便宜太多了。
hash + link list吧。

24hr
60s

【在 g*****e 的大作中提到】
: 没想出太好的答案,答用heap和hash所以ip addr。用heap操作cost很高,hash所以
: ipv4 addr很expensive。不知道是open question还是有标准答案的。
: 大意是某公司gateway记录着所有connection的外部ip addresses,比如保留最多24hr
: ,不断更新。现在求给定时间过去k sec内出现最多的n个ip address(es),k可以为60s
: ,600s,3600s,n=1,10,100,etc。设计高效算法和数据结构。

1 (共1页)
进入JobHunting版参与讨论
相关主题
一道关于trie的题目问一道刚面试完的algorithm 的题, 面试官非要最优解,我想不出来啊
过去n小时的top search请教几个面试问题
谁来解释下hashtable的iterator是怎么实现的Data Structure 一题.
问一道类似topK的问题问道C内存的题?
问一道题目google 一题
求教一道面试题问个google面试题(3)
web count 设计微软onsite面经
G家电面题,求解答‏Ask a google interview question
相关话题的讨论汇总
话题: ip话题: count话题: heap话题: trie话题: lru