1、 做一个搜索引擎要实现的基础服务
一尽可能多的爬取网页
二建立快速有效的索引
三根据索引的相关性对网页进行公平的排序
这个公平性排序算法就是google创始人拉里和佩奇的论文,pageRank算法
倒排索引
比如在搜索引擎中搜数学的应用
这里边有两个词数学和应用
笔者说一共大约有30万个词,1000亿个网页,
这样的话维护的一个索引表就是30万乘1000亿大小,索引的每一行是词和词对应的网页的位置比如11001表示第一个第二个第五个网页有搜索的关键词
这样搜索的结果就是数学和应用的词索引值的布尔代数结果。
布尔代数把计算机的01计算和数学结合到了一起。
这张索引是非常巨大的,即使现在的计算机计算能力很强也不能满足,实际工程上是分布式计算来处理的。
3图论和爬虫的关系
这个话题讲的是数学中的图论和搜索引擎基础服务爬取网页的爬虫的关系
格尼斯堡七座桥问题
使用维护一张哈希散列表来实现避免爬取重复的网页
如何构建一个网络爬虫google的面试题:
网络爬虫的定义是如何在有限的时间内爬下更多重要的网页
用广度有先遍历还是深度优先遍历,优先级队列(调度系统)
页面的分析和URL的提取
记录哪些网页已经下载过的小本本
4动态规划
这个问题在我毕业找工作的时候经常会碰到,当时答的不好。书上讲了个例子非常形象
中国地图上标注了n个城市,从北京到广州的话会有n多条线路,问那条线路距离最短。
简单粗暴的算法,排列组合吧所有的可能先列出来,让计算机去算,这样的时间复杂度是10的10次方(比如有平均每个线路上有10个城市,每个节点有10个城市可选)。
而动态规划的做法是,在北京往南的第一次选择中的所有城市画一条线,就是下一站肯定会经过其中一个城市,这样就可以把问题划分为两个问题:
1北京到这条线的哪个城市距离最短
2最短的这个城市到广州那条线路最短(递归了)
这样的话,复杂度是10乘以10乘以10