您的位置:首页 > 职场人生

九章算法面试题21 寻找最近单词对

2015-05-12 14:04 316 查看

九章算法官网-原文网址

http://www.jiuzhang.com/problem/21/



题目

初阶:有一篇包含N个单词的文章和M个单词对,对于每个单词对,如果他们在文章中都出现了,求出他们在文章中的最近距离。例如文章为:ABBCABC,那么对于单词对(A,C)的最近距离是1(最后的ABC,A必须在C的前面)
进阶:假设N和M都是海量数据,有什么好的方法可以优化?

解答

初阶:扫描文章的单词序列,对于单词对(W1,W2)记录最后一次出现W1的位置P1,当扫描到W2时,计算当前位置和P1的距离,保存下最优的方案。
进阶:使用Map-Reduce对各个单词及其位置建立索引。对于一次请求中的单词对(W1,W2)在索引中获得位置列表,遍历两个列表得到结果。如果两个列表的长度相差不大,则线性扫描,如果相差很大,则使用二分法查找。

面试官角度

本题的初阶考察点是编程实现。进阶问题考察点主要是“索引“ ”MapReduce“和在两个数组中招最近元素时,根据数组的长度差距来选择使用线性扫描还是二分查找。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: