您的位置:首页 > 其它

《数学之美》读书笔记1

2016-08-27 20:39 239 查看
关于搜索

1.自动下载互联网的所有网页——网络爬虫

先介绍两个概念,广度优先搜索(Breadth-First Search,BFS)和深度优先搜索(Depth-First Search,DFS)。BFS是指尽可能“广”地访问与每个节点直接相连的其他节点,DFS是一条路走到黑。

搜索引擎的网络爬虫更应该定义成“如何在有限的时间里最多地爬下最重要的网页”。在各个网站中最重要的网页肯定是首页,所以在这个前提下,BFS明显优于DFS。实际的网络爬虫是由成百上千甚至成千上万台服务器组成的分布式系统,考虑爬虫的分布式结构以及网络通信的握手成本,对于一个网站,需要一次性把这个网站的内容都下载下来,而不是每个网站先下载5%,然后再回过头来下载第二批,这样可以避免握手的次数太多,那么这又有点像DFS。

总结起来,网络爬虫对于网页遍历的次序不是简单的BFS或者DFS,而是有一个相对复杂的优先级排序的方法。在网络爬虫中,人们使用“散列表”而不是记事本来记录网页是否下载过的信息。

2.索引

最简单的索引结构是用一个很长的二进制数表示一个关键字是否出现在每篇文献中。由于这些二进制数中的绝大部分位数都是零,只需要记录那些等于1的位数即可。这样搜索引擎的索引就变成了一张大表:表的每一行对应一个关键词,而每一个关键词后面跟着一组数字,是包含该关键词的文献序号。

索引非常庞大,普遍的做法是根据网页的序号将索引分成很多份,分别存储在不同的服务器中。每当接受一个查询时,这个查询就会被分配到许许多多的服务器中,这些服务器同时并行处理用户请求,并把结果送到主服务器进行合并处理,最后将结果返回给用户。

3.排序——PageRank算法(衡量网页质量的算法)

一个网页Y的排名应该来自于所有指向这个网页的其他网页X1,X2……,Xk的权重之和,权重应该是这些网页本身的网页排名,这就变成了“先有鸡还是先有蛋”的问题了。

布林把这个问题变成了一个二维矩阵相乘的问题,并用迭代的方法解决了这个问题。他们先假设所有网页的排名是相同的,并且根据这个初始值不断迭代。理论上,不论初始值如何选取,这种算法都能保证网页排名的估计值能收敛到排名的真实值,一般来讲,只要10次左右的迭代基本上就收敛了。

4.确定网页和查询的相关性——TF-IDF

词频(Term Frequency,TF),逆向文件频率(Inverse Document Frequency,IDF),IDF=log(|D|/|Dw|),作为词频的权重。相关性的计算公式就是词频的加权求和。

5.有限状态机和动态规划(Dynamic Programming,DP)——地图与本地搜索的关键技术

有限状态机是一个特殊的有向图,它包括一些状态和连接这些状态的有向弧。每一个有限状态机都有一个起始状态和一个终止状态,以及若干中间状态。每一条弧上带有从一个状态进入下一个状态的条件。

动态规划的目的是为了找到一个图中给定两点间的最短距离。

以查找中国公路网上从北京到广州的最短路径为例。首先在地图上横切一刀,这一刀要保证将任何从北京到广州的路线一分为二,那么从北京到广州的最短路径必须经过这条线上的某个城市。我们可以先找到从北京到这条线上所有城市的最短路径,最后得到的全局最短路线一定会包含这些局部最短路线中的一条。将寻找全局最短路线的问题分解成一个个寻找局部最短路径的小问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: