- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
六度空间应用——找出两个陌生人之间关系
六度空间的应用——找出两个陌生人之间的关系(一)????? 前几日在人人网上看到有位北京大学的做了一个人人网六度空间的Flash, 觉得很好玩, 遂向其请教一二, 自己也做了一个, 这篇就来做个梳理和总结吧, 哪些性能方面不好的希望大家能够指出并改进. 本篇没有完整的代码或程序可以下载, 更没有我获取到的数据可以下载, 数据也很大, 我用XML存储了我们学校整个人际关系用了几百兆! 切勿用文章内的思路做盗取他人隐私违法犯罪的商业应用!六度空间可行性分析六度空间”理论又称作六度分隔(Six Degrees of Separation)理论。这个理论可以通俗地阐述为:“你和任何一个陌生人之间所间隔的人不会超过六个,也就是说,最多通过六个人你就能够认识任何一个陌生人。”该理论产生于20世纪60年代,由美国心理学家米尔格伦提出。????? 输入一个人A, 找到另一个人B, 通过在线联网的方式(本地不保存数据)找到A和B之间的关系那当然好, 但在人人网没有提供一个能快速找到任意一个人的好友的API情况下做到这点几乎是不可能的(时间方面). 我做了一个测试, 如果一个人有1000个好友, 在120kbps的网速下找到他的所有好友大概需要8s钟! 可想而知, 你想找出A和B之间的关系, 采用双向搜索自然来得快不少, 先找A所有的好友, 再找B的好友, 看看有没有交集...没有继续找A所有的好友的好友, 找B所有的好友的好友, 看看有没有交集...到这一步需要的时间地球大概已经转了半圈了, 我昨晚找了C的好友, 再找C的好友的所有好友, 从早上1:58找到早上6:01...所以我说这么多意思是没有快速API的情况下做成在线版几乎不可能, 除非你本地保存了数据, 说着A和B是直接好友关系.????? 那么就下载所有人人网用户的信息?人人网有近2亿账号, 如果每个只需要5秒的话,? 对于我这个带宽120kbps, 硬盘250GB的电脑显然也不可能...那么就从小范围做起吧, 就找出我们学校所有人之间的关系吧.得到学校里每个人, 以及每个人的好友????? 假设学校里的每个人都注册了人人网(对于那些没有注册人人网的俺也没法找到他们, 呵呵), 我偶然想到了一个特殊的人人网用户A, 这个用户是学校一个聊天论坛在人人网里的一个账号, 好友数量已经达到2000, 我有如下假设: 任何一个学校里的人B, 一定有一个他认识的人认识A, 按照人人网里的话说叫做A和B有共同好友, 这个假设根据我个人经验认为是正确的, 如果B不满足这个条件, 这个人一定孤陋寡闻, 不参加社交-_-!!????? 所以找到学校里每一个人, 可以以这个A为起点, 找到A的所有好友集合S1, 再找到S的所有好友, 那么整个学校的人的名单90%以上已经到手. 在昨天那个月黑风高的夜晚, 我整整用了4个小时把学校所有人都下载下来了(大概15W条记录).存储人和人之间的关系????? 光下载到到人的名单还不行, 我并不想以A为中心建立大家之间的关系, 因为A毕竟是一个组织, 不是一个人, 以它为中心的关系几乎都是浮云, 现在已经有A的所有好友, 以及A的好友的好友集合S2{sa, sb, sc...}, 学校的所有人都包含在S2中了, 任何人之间的关系可以用图表示, 在人人网中且是无向图(没有A是B的好友, B不是A的好友这种情况), 所以还得再逆向的找出S2中的每个人的好友, 并存储这个关系!????? 图可以用矩阵法和邻接表表示, 因为这个关系图属于稀疏矩阵, 应该用邻接表表示更省空间(用矩阵表示也是几乎不可能的事情, 因为如果有学校有10000个人, 那么就得建立一个10000*10000的矩阵, 当然可以利用矩阵的一些运算比如找出矩阵特殊值等方法压缩这个矩阵, 但压缩之后的矩阵仍然不小...). 因此我建立了如下一个XML格式的文件存储人和人之间的关系.?123456789101112? xml?version=1.0?Relations????Person?id= name= school= faceUri=????????Friend?id= name= school= faceUri=/????????Friend?id= name= school= faceUri=/????????????/Person????Person?id= name= school= faceUri=????????Friend?id= name= school= faceUri=/????????Friend?id= name= school= faceUri=/????????????/Person/Relations这个把全校所有人都爬虫出来的代码是这样的, 先找出A的所有好友:?123456
文档评论(0)