猎豹移动面试题

1.猎豹常常要根据商家的要求,把广告推送给具备不同标签的用户。比如用的用户可能对3c和toys感兴趣,有的可能对汽车感兴趣。我们有一个矩阵。

         t1 t2 t3...... tn

user1       0      1      0              1

user2       0      1      1              0

...

...

usern       1 1 0 1

矩阵中的元素,代表用户对列标签是否感兴趣。

问题:商家给定一个标签序列比如t1t3t5t7,怎么求出系统中有多少用户对这些标签感兴趣,注意,标签序列是或的性质,不要求精确求解,只需要估计出一个大概的数值。

解答:这一题,我一开始的想法是直接的按列或操作。但是这样的话,复杂度会非常大。比如说,商家甲要求的标签是t1t2t3,商家乙要求的标签是t1t2...tn,这样的话,每来一个商家,就需要进行一次与操作。算法效率很低下。

后来面试官提醒我,可以从概率的角度进行思考。比如说要求p1Up2...Upn的概率(在这里p1指的是对t1标签感兴趣的用户的概率,其他类似),可以按照下图进行求得。



上面的推导其实用到了德·摩根律,公式如下

  • (A ∪B)C  =  AC ∩BC
  • (A ∩B)C  =  AC ∪BC

2.面试官问到了我一点,末次点击率是怎么计算出来的。我当时不知道怎么回答。到公司之后,希望可以问下公司的同事,那个0.5的含义。
3.建堆的时间复杂度
建立一个堆,有两种建堆方式。一种是逐个插入,一个是先是乱序,之后从[NodeNum/2...1]进行 下滤 操作。无论是哪一种建堆方法,时间复杂度都是 O(n)
记住,只有 插入的时候用到上滤操作 ,删除和建堆的时候,都是用到 下滤操作 !!!


猜你喜欢

转载自blog.csdn.net/wusecaiyun/article/details/49451531