社区
数据结构与算法
帖子详情
一个新浪面试题
nkorange
2011-04-28 10:11:33
有一个大小为2G的文件,存储微博里的粉丝关系。文件有两列,每列都是一个整型数。如某一行的两列分别为:123456 654321。
则代表id为654321的用户是id为123456的用户的粉丝。如果用户123456又是654321的粉丝,则称这两个用户互粉。
要求找出文件里所有的互粉用户。
...全文
1725
19
打赏
收藏
一个新浪面试题
有一个大小为2G的文件,存储微博里的粉丝关系。文件有两列,每列都是一个整型数。如某一行的两列分别为:123456 654321。 则代表id为654321的用户是id为123456的用户的粉丝。如果用户123456又是654321的粉丝,则称这两个用户互粉。 要求找出文件里所有的互粉用户。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
19 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
助力实体老徐
2011-06-05
打赏
举报
回复
这个问题,其实没有那么麻烦吧。。。,就是在一个键值对的列表里,找互为键值的元素。只不过元素过大,无法一次全部导入内存。 只是分批读去就可以了。。。。
比如读取前十个到一个二维数组, 然后从第一个开始循环,判断这十个里有没有互为键值对的。循环完了没有,则用另外一个二维数组读取下一个十个,如果这十个也没有,则继续读取。知道找到,输出结果到结果文件,然后break退出,或者没有找到,到文件尾为止。 开始第一个二维数组的第二个循环,等第一个数组全部循环完毕之后,再往第一个数组里读取下一个十个。。。。
fairywell
2011-05-16
打赏
举报
回复
hash 时间上是个问题,2G 的数对 hash 可以做实验看看时间
xry1983 兄的方法比较靠谱,另外可否引入 inverted index 的思想呢
zmr0469
2011-05-08
打赏
举报
回复
1.数据量不是很大时,直接map
2.数据量过大时,mergesort或者hadoop
Oo纳兰筱DoO
2011-05-06
打赏
举报
回复
hash应该可以吧
fenix124
2011-05-04
打赏
举报
回复
别这么快结。每对都整理成前面数字小,后面数字大。以前面数字取一段范围把存到文件里面,然后每个文件单独处理,找到两个相同的数对则互粉数加1。硬盘读写次数较多,内存占用很少。
一名金人
2011-04-29
打赏
举报
回复
关注一下
星空仰望者
2011-04-29
打赏
举报
回复
[Quote=引用 6 楼 xry1983 的回复:]
4.比较拷贝出的内存。可以对这两块内存再进行一次排序,内存A按粉丝ID排序,内存B按用户ID排序,按步骤3的方法,找出A.粉丝ID==B.用户ID者。相等的就是互粉,不等的则移动A或B
[/Quote]
由于分批拷贝出的数据已经比较少了,所以这次排序不会有太高的时间复杂度了。
星空仰望者
2011-04-29
打赏
举报
回复
1 文件很大,针对该文件使用哈希表不可取
2 拷贝一份文件,先对两个文件进行适当排序(读进内存排序好之后再保存):文件A按照用户ID(第一列)排序,文件B按照粉丝ID(第二列排序)。由于重复的Key很多,这种情况尤其适合“计数排序”,时间复杂度只有O(n),楼主自己检索一下“计数排序”的算法吧,《算法导论》里就有。
3 两份文件进行计数排序后,A文件中的数据是按照用户ID(升序)排列,B文件中的数据按照粉丝ID(升序)排列。每次从A文件中按用户ID读取一块内存(依次读取到内存A,直到读到不同ID为止),从B文件中按粉丝ID读取一块内存(内存B)。比较两个ID,若相等,说明有可能存在互粉,若不等,则移动文件A或B,A<B 则移动A,反之则移动B,直到相等。
4.比较拷贝出的内存。可以对这两块内存再进行一次排序,内存A按粉丝ID排序,内存B按用户ID排序,按步骤3的方法,找出A.粉丝ID==B.用户ID者。相等的就是互粉,不等的则移动A或B
5.依次循环。
6.请楼主赶快给分哈。。
zhusizhi007
2011-04-29
打赏
举报
回复
先拷一份,排下序,再将另一份列倒一下再排序。。。。
nkorange
2011-04-29
打赏
举报
回复
看了大家的解法,觉得还是zyl072的答案最合适。文件大小我不记得是不是2G了,不过肯定是不可能都丢到内存里的。分就给他啦!
turing-complete
2011-04-29
打赏
举报
回复
在下,经过半个小时的深思,提出一愚见:
1、此问题的字符串极具特殊性,可以将其转化为整数。以新浪微博为例账号均为10位,用字符串存10个ASC码,占空间10B。用
unsigned int
存,则占用4B。
2、账号都有个起始号码,不会从0开始,假设,存在起始号为
unsigned int
start=1827217000;存在最高号
unsigned int
end=1837217000;(事实上,这个2G的文件所含有的不重复账号的个数总是有上限且可证的)
3、建立一个结构体,struct person{
unsigned int
id;person *friends;//关注人列表}
4、建立一个person的数组,person list[end-start]。此后开始读取文件=》
a、读取一行,前面的账号转型为无符号整数former,后见面(粉丝)转为整形follower。
b、将former 加入列表list[follower]的末尾(如果不存在)。(list[follower]这个元素是个列表)
c、到list[former]中查找follower是否存在,存在则将此对输出到文件,并在内存中删除此follower。
showjim
2011-04-29
打赏
举报
回复
数据不重复的情况下,使相关id有序,全部排序以后出现重复就是互粉了。
数据量的大小区别,就是内排序与外排序的区别
绿色夹克衫
2011-04-29
打赏
举报
回复
新浪总是把简单的搞复杂,以为把数据量弄大了就成了难题了。
vipwan
2011-04-29
打赏
举报
回复
2G的话 直接丢内存.NOSQL很多都这样做的.内存可能需要4G
然后 就是 HASH键值对. 倒置这个键值对. 冒泡一遍 重复的就是 互粉了.
这个应该是以 内存换取效率了.
竞天问
2011-04-28
打赏
举报
回复
存的时候应该会用HASH或类似的结构吧
如果是的话就应该很简单了
如果没有的话首要任务是用更有效的结构来存储数据
zyl072
2011-04-28
打赏
举报
回复
2G的话,数据量并不是很大,考虑是文本文件,并且包含空格、换行符, 实际数据应该是只有几百 MB就能存储。直接全部读进来,用HASH 或者 C++ Map(Set) 来存储, 每次插入 A\B 时,判断 B/A 是否已经存在即可。
倘若文件超过 2G,达到几十G或者更大直至内存无法容纳的话,可以参见我在这个帖子的回帖:
http://topic.csdn.net/u/20110309/11/3c8d0e8f-8d06-4909-bd37-184f63f2a871.html
Android
面试
题
+答案
2011Android技术
面试
整理附有详细答案(包括百度、
新
浪
、中科软等多家公司笔试
面试
题
)
android和java
面试
大全集
史上最全的android和java
面试
文档集。包括有: java程序员
面试
宝典.txt Java
面试
宝典2011版-1C,Java基础部分.doc 三大框架
面试
题
.zip 技术
面试
题
.zip Android笔试
题
库 C语言终极
面试
宝典.doc Java笔试
题
目汇总.pdf Java
面试
宝典_2010.doc
面试
全攻略100
题
.doc 智力
题
和答案.doc C语言
面试
题
大汇总.doc 计算机专业必备笔试
面试
锦囊.doc 笔试.rar
面试
题
集合.zip C语言
面试
题
大汇总1.doc
面试
题
集合 java
面试
题
JAVA
面试
题
集合(项目2部).chm 华为笔试
题
大全(史上最齐全).doc JAVA
题
库.doc java
面试
题
.zip Java
面试
宝典2011版-1A,Java基础部分.doc jsp笔试
题
全集.doc Java学习笔记(必看经典).doc android和java
面试
大全.rar JAVA精华.doc JAVA经典算法50
题
1.doc Android笔试
题
库.rar Java
面试
宝典2011版-1B,Java基础部分.doc Java工程师试
题
(机构招聘)20100526.doc C语言
面试
题
大汇总
面试
题
及答案.doc Java23种设计模式(总结)1.doc JAVA_WEB
面试
笔试
题
.doc 实施人员初试
题
20091009.doc 笔试智力
题
.doc C语言
面试
题
.doc 2011android
面试
题
目及其答案大全.doc java基础笔试
题
.doc 安卓鄙视
题
附答案.txt 史上最全的android
面试
题
库.docx android工程师笔试试卷.doc Android
面试
题
(详细答案).doc Android内测
题
.doc Java
面试
题
2.doc JAVA
面试
题
80页.doc 智力
题
.doc JAVA 综合
面试
题
.pdf 分类后的葵花宝典 葵花宝典.doc 九阴真经.doc Java
面试
题
1.doc 葵花宝典-数据库类.doc JAVA
面试
题
集锦.doc Java程序员,
面试
必读.txt 软通动力招聘测试
题
.doc java
面试
葵花宝典.doc
新
建 文本文档 (2).txt 125条常见的JAVA
面试
题
.doc NET易筋经.doc 葵花宝典-Java Web类.doc 葵花宝典-基础类.doc 葵花宝典-数据库类1.doc 技术测评java.doc 技术测评.net.doc 瑞星笔试
题
(15道).doc 汉端笔试
题
(7页).doc 一道测试notepad笔试
题
.doc 奇虎
面试
题
.doc 喜安科
面试
题
.doc 北京博彦科技笔试+
面试
.doc 清华同方开发的
面试
题
(有兴趣的看一下了 !) 中软的
面试
题
(转贴).doc 亚控科技比试
题
.doc 神州泰岳测试试
题
(笔试)转贴.doc 一家通讯公司的
面试
题
目.doc 软件测试工程师试
题
发布版.doc 某公司的
面试
试
题
.doc 一个外包测试公司的笔试
题
!.doc 时力科技
面试
题
.doc 合力金桥的笔试
题
.doc 一道数据库的笔试
题
目.doc 传视数码公司的
面试
题
.doc 美国英网软件公司
题
目.doc 软件测试工程师测试试
题
大集合(二)包括答案.d 波尔世通的笔试+
面试
.doc 瓦瑟笔试
题
(限男性).doc 软通动力
面试
笔答.doc 常见的测试
题
(转贴).doc 北京大学计算机科学技术研究所.doc 联合网视
面试
题
.doc 缺陷的等级划分,一个经常被问到的问
题
.doc 软件测试工程师笔试试
题
(大集合).doc 千像互动的笔试.doc 2012java
面试
题
分析大全.doc JAVA
面试
题
集合(项目2部).chm JAVA经典算法50
题
1.doc Java工程师试
题
(机构招聘)20100526.doc Java23种设计模式(总结)1.doc 实施人员初试
题
20091009.doc 框架图.png struts
面试
题
hibernate
面试
题
三大框架.txt JAVA
题
库.doc
PHP
新
浪
乐居
面试
题
,
新
浪
php工程师
面试
题
新
浪
php工程师
面试
题
面试
时能否回答出考官的问
题
直接决定了是否能留下来,以下百分网小编整理的关于
新
浪
php工程师
面试
题
,希望对大家有所帮助,更多信息请关注应届毕业生网!
新
浪
php工程师
面试
题
一1、COOKIE、SESSION的联系和区别,多台web服务器如何共享SESSION?2、HTTp协议中的pOST和GET有何区别?3、一段php代码,写出输出结果:/**** 这个程序****/$a=0;$...
新
浪
面试
题
新
浪
面试
题
这篇博客本不打算写,但是觉得写下来会帮助一些人。 记得不太清了 大致意思是 TCP/IP UDP IMCP 等协议属于应用层,运输层等等,是一个选择
题
。 session和cookie的区别 从一段html中正则匹配出来图片的url。 参考: $pattern = '/src\=\"([\w\:\/\.]*)\"/'; preg_match_all($p
吐血整理50家企业真实大数据
面试
题
!!学长实测,真实
面试
!!快收藏!
文章目录前言京东
面试
题
58
面试
题
新
浪
面试
题
搜狐
面试
题
360
面试
题
小米
面试
题
顺丰
面试
题
OPPO
面试
题
VIVO
面试
题
华为
面试
题
boss直聘
面试
题
搜狗金融
面试
题
瓜子二手车
面试
题
猎豹移动
面试
题
作业盒子
面试
题
每日优鲜美团
面试
要求快手
面试
题
学长2
新
美互通
面试
题
金山云
面试
题
图
新
瀚合
面试
题
中创软件
面试
题
清华同方
面试
题
柠檬微趣
面试
题
量化派
面试
题
天阳科技
面试
题
泰康保险
面试
题
软通动力
面试
题
乐元素
面试
题
北京国信博飞
面试
题
知因智慧
面试
题
考满分公司
面试
题
亿联银行(石景山瑞达广场)
面试
题
洋葱科技
面试
题
北京卓越讯通
面试
题
环信
面试
题
e代驾面
数据结构与算法
33,027
社区成员
35,336
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章