g******y 发帖数: 143 | 1 1. 设计一个产品推荐系统。
某个客户,他有买了一些商品,他有一些朋友。那么推荐给这个客户的商品就是他朋友
买的东西且他自己没买过的。
另外,这些商品应该按重要性来排序。重要性是这样定义的:如果某件商品,他朋友中
买的人数最多的就该排在最前面,依次递减。
有以下两个函数可以使用:
productList *getProducts(user)
friendList *getFriends(user)
请实现:
productList *getRecommendation(user)
2.写测试程序
3.写测试用例
4.分析时间空间复杂度 |
A*****o 发帖数: 284 | 2 献丑用python实现了一个
class User:
def __init__(self, uid):
self.uid = uid
class Product:
def __init__(self, pid):
self.pid = pid
# given API
# def getProducts(user)
# def getFriends(user)
def cmpFriendBought(a, b): # descending order
return -cmp(a[1][1], b[1][1])
def getRecommendation(user):
counter = {} # product_id => [product, bought_count_by_friends]
myList = getProducts(user)
myBought = set([])
for p in myList:
myBought.add(p.pid)
friends = getFriends(user)
for friend in friends:
plist = getProducts(friend)
for p in plist:
pid = p.pid
if not pid in myBought:
if not pid in counter:
counter[pid] = [p, 1]
else:
counter[pid][1] += 1
items = counter.items()
items.sort(cmp = cmpFriendBought) # descending sorted by bought count
recommend = []
for item in items:
recommend.append(item[1][0])
return recommend |
q****m 发帖数: 177 | 3 K-way merge according to product key
need to assume getProducts(user) returns a sorted list.
【在 g******y 的大作中提到】 : 1. 设计一个产品推荐系统。 : 某个客户,他有买了一些商品,他有一些朋友。那么推荐给这个客户的商品就是他朋友 : 买的东西且他自己没买过的。 : 另外,这些商品应该按重要性来排序。重要性是这样定义的:如果某件商品,他朋友中 : 买的人数最多的就该排在最前面,依次递减。 : 有以下两个函数可以使用: : productList *getProducts(user) : friendList *getFriends(user) : 请实现: : productList *getRecommendation(user)
|
A*****o 发帖数: 284 | 4 请问merge具体怎么做呀?
【在 q****m 的大作中提到】 : K-way merge according to product key : need to assume getProducts(user) returns a sorted list.
|
i********5 发帖数: 52 | |
s******7 发帖数: 1758 | 6 就是把他朋友的product list全部读出来,如果属于自己买过得不要(自己买过的
product建个hashset),写到一个Map,再按count排序就可以了,如
果一共有n product, nlogn 吧 |
g******y 发帖数: 143 | 7 就这一道
【在 i********5 的大作中提到】 : 多谢楼主分享,可以说说其他两道是啥吗?
|
x******9 发帖数: 473 | 8 跟我之前做的一模一样,要test case
1. 设计一个产品推荐系统。某个客户,他有买了一些商品,他有一些朋友。那么推荐
给这个客户的商品就是他朋友买的东西且他自己没买过的。另外,这些商品应该按重要
性来排序。重要性是这样........
【在 g******y 的大作中提到】 : 1. 设计一个产品推荐系统。 : 某个客户,他有买了一些商品,他有一些朋友。那么推荐给这个客户的商品就是他朋友 : 买的东西且他自己没买过的。 : 另外,这些商品应该按重要性来排序。重要性是这样定义的:如果某件商品,他朋友中 : 买的人数最多的就该排在最前面,依次递减。 : 有以下两个函数可以使用: : productList *getProducts(user) : friendList *getFriends(user) : 请实现: : productList *getRecommendation(user)
|
k**8 发帖数: 186 | |
s******3 发帖数: 344 | 10
【在 g******y 的大作中提到】 : 1. 设计一个产品推荐系统。 : 某个客户,他有买了一些商品,他有一些朋友。那么推荐给这个客户的商品就是他朋友 : 买的东西且他自己没买过的。 : 另外,这些商品应该按重要性来排序。重要性是这样定义的:如果某件商品,他朋友中 : 买的人数最多的就该排在最前面,依次递减。 : 有以下两个函数可以使用: : productList *getProducts(user) : friendList *getFriends(user) : 请实现: : productList *getRecommendation(user)
|
i******l 发帖数: 235 | 11 请问楼主是new grad吗?
【在 g******y 的大作中提到】 : 就这一道
|
g******y 发帖数: 143 | 12 It's a senior position.
【在 i******l 的大作中提到】 : 请问楼主是new grad吗?
|