求一算法,有某地区所有的通话数据,2个不认识的号码如何中转认识。

f231283608 2014-08-12 11:02:35
几年前做过移动的项目,当时也有这个功能,但不是我做的;当时是做的一个Silverlight页面,输入2个互不认识的电话号码,可以知道让号码1打X1然后认识X2,通过X2认识X3,同X3认识X4,最终能认识号码2这样;使用的ORCALE数据仓库+MSSQL,查询一次大约半分钟-2分钟的样子。

当时实现的方法好像比较死板,无非就是循环递归,查询号码1所有的通话记录,在找所有“通话记录号码”的所有通话记录,直到找到号码2为止,递归只执行十层的样子。

如果把数据结构看成普通的,就是列一本机号码,列二拨出拨入号码,列三拨入拨出状态这样。
求牛人,求算法(数据结构可优化)。
...全文
282 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
熊熊大叔 2014-08-20
  • 打赏
  • 举报
回复
对大数量的时候,可以搜一下google的pregel框架下的dijkstra算法实现。
熊熊大叔 2014-08-20
  • 打赏
  • 举报
回复
引用 8 楼 f231283608 的回复:
[quote=引用 5 楼 truelance 的回复:] 百度Dijkstra算法
http://wenku.baidu.com/link?url=ouKyYZa9KAfcEst4rYk-N5V3KVpGVrmMgir1B-STRo91H4fDh1658_SSssiubYHi6V3T-IbId10marsTAPreF-GiQcVlIi7IaJmi_Ls1n93 看了,这个和我说的一回事啊。。就是代码化了一点。就是说的这个慢。。 那个链接的例子基本只有2-3层,打个比方想想看,如果用户A想要认识用户B,那么通过电话的话,用户A有20个不同电话的通话纪录,分别是A1-A20;A1-A20每个都分别又有20个不同的通话记录,如A1是A11-A120,A20是A201-A2020;A11-A120、A201-A2020分别又有20个不同的电话通话记录;这才3层而已,1层是20×1个电话号码,2层是20×20,3层是20×20×20,查到10层开10次方那是10240000000000,理论上要遍历这么多电话号码。看到这个数字我都怀疑当时没做到10层,顶多6层64000000而已。 这个是根据那个“六度分离理论”来的:“你想找到世界上任何一人,中间环节不会超过6个人”“你和世界上的任何一个人之间只隔着五个人,不管对方在哪个国家,属哪类人种,是哪种肤色。 ”[/quote] 这个跟你说的不是一回事。你根本没看懂这个算法。
卧_槽 2014-08-18
  • 打赏
  • 举报
回复
引用 6 楼 truelance 的回复:
[quote=引用 2 楼 yuwenge 的回复:] 这么简单都不知道啊,先把所有的串联都跑出来,放到数据库里,来人直接查,毫秒级。
全球50亿人 2500亿亿条记录,你比google还牛B[/quote] 很想知道你哪来这么多数据的。不过 google的数据量绝对不止这么点。
f231283608 2014-08-18
  • 打赏
  • 举报
回复
引用 5 楼 truelance 的回复:
百度Dijkstra算法
http://wenku.baidu.com/link?url=ouKyYZa9KAfcEst4rYk-N5V3KVpGVrmMgir1B-STRo91H4fDh1658_SSssiubYHi6V3T-IbId10marsTAPreF-GiQcVlIi7IaJmi_Ls1n93 看了,这个和我说的一回事啊。。就是代码化了一点。就是说的这个慢。。 那个链接的例子基本只有2-3层,打个比方想想看,如果用户A想要认识用户B,那么通过电话的话,用户A有20个不同电话的通话纪录,分别是A1-A20;A1-A20每个都分别又有20个不同的通话记录,如A1是A11-A120,A20是A201-A2020;A11-A120、A201-A2020分别又有20个不同的电话通话记录;这才3层而已,1层是20×1个电话号码,2层是20×20,3层是20×20×20,查到10层开10次方那是10240000000000,理论上要遍历这么多电话号码。看到这个数字我都怀疑当时没做到10层,顶多6层64000000而已。 这个是根据那个“六度分离理论”来的:“你想找到世界上任何一人,中间环节不会超过6个人”“你和世界上的任何一个人之间只隔着五个人,不管对方在哪个国家,属哪类人种,是哪种肤色。 ”
柳虎425 2014-08-15
  • 打赏
  • 举报
回复
这么简单都不知道啊
熊熊大叔 2014-08-15
  • 打赏
  • 举报
回复
引用 2 楼 yuwenge 的回复:
这么简单都不知道啊,先把所有的串联都跑出来,放到数据库里,来人直接查,毫秒级。
全球50亿人 2500亿亿条记录,你比google还牛B
熊熊大叔 2014-08-15
  • 打赏
  • 举报
回复
百度Dijkstra算法
aperson111 2014-08-15
  • 打赏
  • 举报
回复
引用 2 楼 yuwenge 的回复:
这么简单都不知道啊,先把所有的串联都跑出来,放到数据库里,来人直接查,毫秒级。
KnowKjava 2014-08-15
  • 打赏
  • 举报
回复
啊呀 2014-08-12
  • 打赏
  • 举报
回复
找人?
卧_槽 2014-08-12
  • 打赏
  • 举报
回复
这么简单都不知道啊,先把所有的串联都跑出来,放到数据库里,来人直接查,毫秒级。

590

社区成员

发帖
与我相关
我的任务
社区描述
提出问题
其他 技术论坛(原bbs)
社区管理员
  • community_281
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧