百度面试题及我的解答(1)
2009-11-23 21:56
239 查看
前些日子有朋友去百度面试,带回来道面试题。颇为有趣,一年多没写过代码了。最近正寻思做点什么。正好从这个题开始学习算法吧。题目如下:有一个2G的文件,里面全是单词,想办法把所有的变位词找出。例如:stop和tops。(写这个记录的时候我已经开始做这个题目有些时间了。也再次拿起了《编程珠玑》<这次看的是第二版了>,发现不那么ACM的算法题基本都出自Pearls)初步想法:1.2G的大文件应该是不能内存操作的,但是可以尝试下使用内存映射文件直接排序。<暂时未深入去想>2.外部排序算法:翻书了,归并。3.我的思路:单词都是ASCII码,所以第一步:单词累加,和一样,并且长度一样的单词是相同变位词的可能性就很大了。按照这个记录结果。第二步:在前面的每个结果内,把单词内的字母排序,然后strcmp,相同的就是变位词。Pearls的解答:1.单词内字母排序2.按照第一步的结果排序单词3.按顺序输出即为变位词。我的看法:内存处理很快,不适合多核,没考虑怎么处理大文件。不过我也没考虑大文件,但是我觉得我的想法可以多核并发,但是有个文件,磁盘I/O那么慢,有必要多核吗?有待后面测试。准备工作:首先要生成字典文件。我找了全套Harrypotter的英文TXT下载。取了前四集作为输入,生成了我初步测试文件。HarryPotter生成的字典文件大概2.5M左右。Perl脚本如下:
subread_lines($$){[/code]
my$filename=shift;[/code]
my$outfilehandle=shift;[/code]
openIN_FILE,"<$filename"ordie("Couldnotopen$filename");[/code][/code]
while(1)[/code]
{[/code]
my$line=<IN_FILE>;[/code]
if(notdefined($line))[/code]
{last;}[/code]
chomp($line);[/code]
my@info=split//,$line;[/code]
my$num=@info;[/code]
my$i=0;[/code]
for($i=0;$i<$num;$i++){[/code]
my$word=$info[$i];[/code]
$word=~/(/w+)/;[/code]
$word=$1;[/code]
$word=~tr/A-Z/a-z/;[/code]
print$outfilehandle"$word/n";[/code]
}[/code]
}[/code]
close(IN_FILE);[/code]
}[/code]
openOUT_FILE,">dict.txt"ordie("Couldnotcreateout_struct.txt");[/code]
read_lines("1text.txt",OUT_FILE);[/code]
read_lines("2text.txt",OUT_FILE);[/code]
read_lines("3text.txt",OUT_FILE);[/code]
read_lines("4text.txt",OUT_FILE);[/code]
close(OUT_FILE);[/code]
相关文章推荐
- 百度面试题及我的解答(5)-1 找出下一步需要优化的内容
- 一道百度的面试题解答
- 百度面试题及我的解答(5)-2 step5 & step6 代码
- 百度面试题及我的解答(4)
- 百度面试题及我的解答(3)
- 2014百度研发类笔试题【附详细解答及面试题分享】
- 史上最强大的PHP Web面试题(会做可进百度)----我的解答JS版本
- 百度面试题及我的解答(4) 补class HashMethod1的代码
- 百度面试题及我的解答(4) 补 buffer模板类代码
- 百度面试题及我的解答(2)
- 百度面试题-蚂蚁过木板-完整解答
- [历年IT面试题]百度2014研发类校园招聘笔试题解答
- 百度面试题及我的解答(5)-0 优化性能
- 百度一道面试题的PHP解答
- 华为Python面试题,排列生成的解法,最优解答
- 算法系列-大数据面试题-在超大文件中找出访问百度次数最多的IP
- 关于淘汰85%面试者的百度开发者面试题
- 百度面试题集锦
- 前端面试题--解答
- 百度开发工程师的面试题(导航部门)