免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 9256 | 回复: 14
打印 上一主题 下一主题

[算法] 面试题求高效算法:好友推荐策略 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-03-09 16:32 |只看该作者 |倒序浏览
本帖最后由 lingyv119 于 2013-03-09 22:22 编辑

现有一个社交网站,其好友推荐策略为:
       用户A和用户B不是好友,当二人的共同好友数量超过好友推荐阈值m(可配置)时,就向A和B分别推荐为彼此好友。

任务为:
       不使用STL和Mapreduce,
         对设定的m值,给定一组用户及各自好友列表,对这一组用户,反复自动应用上述好友推荐策略后(假设每次推荐都被采纳),求指定用户的最终好友列表。
       要求算法复杂度不高于O(n^2),用户总数规格不受限;

注:好友关系是双向的,即:如果用户A是用户B的好友,那么用户B一定也是用户A的好友。

简单举例:m =0,  A<->B, A<->C,由于B,C有>m个共同好友A,所以他们自动被推荐为彼此好友:B<->C;
             m>0的情况不再举例;

----------------------------------------------------------------------------------------------------------------------------
一般做法都是:使用二维数组保存互相之间的关系,每次添加关系时遍历新加的这两个用户的所有好友,判断他们是否满足好友关系,
              但这么搞有几次轮询或递归,复杂度是大于O(n^2) 的;
              我试过用户数大于2K时,m=0的情况下,执行时间需要好几分钟。

论坛徽章:
12
巳蛇
日期:2013-09-16 15:32:242015年辞旧岁徽章
日期:2015-03-03 16:54:152015年亚洲杯之约旦
日期:2015-02-11 14:38:37双鱼座
日期:2015-01-05 11:05:47戌狗
日期:2014-12-08 09:41:18戌狗
日期:2014-08-15 09:29:29双子座
日期:2014-08-05 09:17:17卯兔
日期:2014-06-08 15:32:18巳蛇
日期:2014-01-27 08:47:08白羊座
日期:2013-11-28 21:04:15巨蟹座
日期:2013-11-13 21:58:012015年亚洲杯之科威特
日期:2015-04-17 16:51:51
2 [报告]
发表于 2013-03-09 18:13 |只看该作者
方法还是这么个方法,但是改用邻接表来实现会好很多(在用户数很大的时候)。

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
3 [报告]
发表于 2013-03-09 19:52 |只看该作者
a <=> b0...bn .... bm
bn....bm...bk  <=> c

给bx设一Flag,从A到bx,设置
再从c到bx,查Flag,已设置则count++

count即所求

论坛徽章:
0
4 [报告]
发表于 2013-03-09 22:21 |只看该作者
请大家说出自己解法的算法复杂度。。。

论坛徽章:
154
2022北京冬奥会纪念版徽章
日期:2015-08-07 17:10:5720周年集字徽章-年
日期:2022-10-26 16:44:2015-16赛季CBA联赛之深圳
日期:2022-11-02 14:02:4515-16赛季CBA联赛之八一
日期:2022-11-28 12:07:4820周年集字徽章-20	
日期:2023-07-19 08:49:4515-16赛季CBA联赛之八一
日期:2023-11-04 19:23:5115-16赛季CBA联赛之广夏
日期:2023-12-13 18:09:34
5 [报告]
发表于 2013-03-11 13:05 |只看该作者
回复 2# zhaohongjian000


    生产环境一般不用链表,研究的时候数值比较小还能忍受

论坛徽章:
154
2022北京冬奥会纪念版徽章
日期:2015-08-07 17:10:5720周年集字徽章-年
日期:2022-10-26 16:44:2015-16赛季CBA联赛之深圳
日期:2022-11-02 14:02:4515-16赛季CBA联赛之八一
日期:2022-11-28 12:07:4820周年集字徽章-20	
日期:2023-07-19 08:49:4515-16赛季CBA联赛之八一
日期:2023-11-04 19:23:5115-16赛季CBA联赛之广夏
日期:2023-12-13 18:09:34
6 [报告]
发表于 2013-03-11 13:06 |只看该作者
本帖最后由 shang2010 于 2013-03-11 15:28 编辑

回复 1# lingyv119


    为神马不肯用stl,想把问题搞复杂么??


是哪家公司的啊??

论坛徽章:
12
巳蛇
日期:2013-09-16 15:32:242015年辞旧岁徽章
日期:2015-03-03 16:54:152015年亚洲杯之约旦
日期:2015-02-11 14:38:37双鱼座
日期:2015-01-05 11:05:47戌狗
日期:2014-12-08 09:41:18戌狗
日期:2014-08-15 09:29:29双子座
日期:2014-08-05 09:17:17卯兔
日期:2014-06-08 15:32:18巳蛇
日期:2014-01-27 08:47:08白羊座
日期:2013-11-28 21:04:15巨蟹座
日期:2013-11-13 21:58:012015年亚洲杯之科威特
日期:2015-04-17 16:51:51
7 [报告]
发表于 2013-03-11 16:17 |只看该作者
shang2010 发表于 2013-03-11 13:05
回复 2# zhaohongjian000

用户之前的好友关系,如果用矩阵表示的话一定是一个稀疏矩阵,你算算当用户数比较大的时候矩阵的消耗?

论坛徽章:
154
2022北京冬奥会纪念版徽章
日期:2015-08-07 17:10:5720周年集字徽章-年
日期:2022-10-26 16:44:2015-16赛季CBA联赛之深圳
日期:2022-11-02 14:02:4515-16赛季CBA联赛之八一
日期:2022-11-28 12:07:4820周年集字徽章-20	
日期:2023-07-19 08:49:4515-16赛季CBA联赛之八一
日期:2023-11-04 19:23:5115-16赛季CBA联赛之广夏
日期:2023-12-13 18:09:34
8 [报告]
发表于 2013-03-11 16:53 |只看该作者
本帖最后由 shang2010 于 2013-03-11 17:06 编辑

回复 7# zhaohongjian000


    能做这种业务的都是有钱的大户,不差钱,要你绞什么脑汁帮公司省钱哈

多参加一下技术活动认识朋友,散散心也是好的,业界有好办法会在一定的技术场合公开分享的,到时候大家一起copy

论坛徽章:
12
巳蛇
日期:2013-09-16 15:32:242015年辞旧岁徽章
日期:2015-03-03 16:54:152015年亚洲杯之约旦
日期:2015-02-11 14:38:37双鱼座
日期:2015-01-05 11:05:47戌狗
日期:2014-12-08 09:41:18戌狗
日期:2014-08-15 09:29:29双子座
日期:2014-08-05 09:17:17卯兔
日期:2014-06-08 15:32:18巳蛇
日期:2014-01-27 08:47:08白羊座
日期:2013-11-28 21:04:15巨蟹座
日期:2013-11-13 21:58:012015年亚洲杯之科威特
日期:2015-04-17 16:51:51
9 [报告]
发表于 2013-03-11 21:50 |只看该作者
zhaohongjian000 发表于 2013-03-11 16:17
用户之前的好友关系,如果用矩阵表示的话一定是一个稀疏矩阵,你算算当用户数比较大的时候矩阵的消耗?


绞尽脑汁?如果邻接表就算的上是“绞尽脑汁”,那我不知道什么问题是简单的,也不知道二维数组有没有绞尽您的脑汁。

论坛徽章:
12
巳蛇
日期:2013-09-16 15:32:242015年辞旧岁徽章
日期:2015-03-03 16:54:152015年亚洲杯之约旦
日期:2015-02-11 14:38:37双鱼座
日期:2015-01-05 11:05:47戌狗
日期:2014-12-08 09:41:18戌狗
日期:2014-08-15 09:29:29双子座
日期:2014-08-05 09:17:17卯兔
日期:2014-06-08 15:32:18巳蛇
日期:2014-01-27 08:47:08白羊座
日期:2013-11-28 21:04:15巨蟹座
日期:2013-11-13 21:58:012015年亚洲杯之科威特
日期:2015-04-17 16:51:51
10 [报告]
发表于 2013-03-11 21:53 |只看该作者
shang2010 发表于 2013-03-11 16:53
回复 7# zhaohongjian000


顺带,不用回复我了。我跟楼主说可以用邻接表,你说邻接表不好;我说邻接表的好处,你立马改口说公司有钱,不差这点服务器资源。我也懒得跟你算,因为你不过是在东扯西扯,我不愿跟您扯,您找别人。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP