由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 考古--用户最多的3连击问题
相关主题
问两道amazon的面试题请教一个面试题
amazon三连击这题要怎么设计hash function呢?问一道google统计句子相似度的问题
问道算法题Google Onsite 面经
amazon版上面试问题请教新鲜出炉的Google电面面经,求祝福
三连击问一个cracking code interview上的问题啊
算法题请教一个 Set 的Java面试题
Amazon第一轮面试报offer from Amazon &MS, 同时谢谢大家 在板上学到好多东西
刚刚被Google电面了,真失败9 个苹果 in 40 个罐, 怎么解?
相关话题的讨论汇总
话题: hits话题: map话题: int话题: tmp话题: hit
进入JobHunting版参与讨论
1 (共1页)
r******n
发帖数: 170
1
在Log中找用户最多的3连击问题,有最后结论吗?
Userid PageID
A 1
A 2
A 3
B 2
B 3
C 1
B 4
A 4
找出最常用的3个访问序列:
对于用户A:1-2-3, 2-3-4
用户B:2-3-4
2-3-4 是最常见的
我大致想想,是这么做的,建一个map >用来扫描log文件
,每当针对一个usr_id,list size达到3时,把这个三链接做成t_hits结构,作为key放
到另外一个map里存起来,然后把list头的第一个pageID去掉,
这样子扫描完毕后,第二个map里就是三连击的counter map.
但是要找到最大的三连击,还得再扫描一次第二个map。觉得效率不够高?关键map_t_
hits里面的value还可能在变化,不然是个静态的,直接往个heap里插,最后顶上就是
最大的了。
大致结构如下,欢迎点评:
struct t_hits
{
int f_page;
int s_page;
int t_page;
};
map > map_hit;
map map_t_hits;
scan records:
foreach( record: r in log)
{
if(map_hit.count(r.userid) >0)
{
map_hit[r.uid].second.push_back(r.pageID);
if(map_hit[r.uid].second.size() ==3) //found a three page hits for
this user
{
list tmp=map_hit[r.uid].second;
t_hits(tmp[0],tmp[1],tmp[2]);

if( map_t_hits.count(t_hits) >0)
map_t_hits[t_hits]++;
else
map_t_hits[t_hits]=1;
}
}
else
{
list tmp(r.pageID);
map_hit[r.uid]=tmp;
}
}
iterate map_t_hits once to locate its key(t_hits) with highest value
h*********n
发帖数: 11319
2
经典解法: 2个hash表
hash1: key是userID,value是该用户最近两次点击的网页
hash2: key是出现过的三连击组合,value是该三连击的出现次数

【在 r******n 的大作中提到】
: 在Log中找用户最多的3连击问题,有最后结论吗?
: Userid PageID
: A 1
: A 2
: A 3
: B 2
: B 3
: C 1
: B 4
: A 4

1 (共1页)
进入JobHunting版参与讨论
相关主题
9 个苹果 in 40 个罐, 怎么解?三连击
最popular url的算法问题算法题
说说下午的面试经历。。。Amazon第一轮面试
请教一下一道EPI上面的题刚刚被Google电面了,真失败
问两道amazon的面试题请教一个面试题
amazon三连击这题要怎么设计hash function呢?问一道google统计句子相似度的问题
问道算法题Google Onsite 面经
amazon版上面试问题请教新鲜出炉的Google电面面经,求祝福
相关话题的讨论汇总
话题: hits话题: map话题: int话题: tmp话题: hit