数学之美:图论和网络爬虫

简介:

我们上回谈到了怎样创建搜索引擎的索引,那么怎样自动下载互联网所有的网页呢,它要用到图论中的遍历(Traverse) 算法。


图论的起源可追溯到大数学家欧拉(Leonhard Euler)。1736 年欧拉来到德国的哥尼斯堡(Konigsberg,大哲学家康德的家乡,现在是俄罗斯的加里宁格勒),发现当地市民们有一项消遣活动,就是试图将下图中的每座桥正好走过一遍并回到原起点,从来没有人成功过。欧拉证明晰这件事是不行能的,并写了一篇论文,通常以为这是图论的开始。


图论中所讨论的的图由一些节点和连接这些节点的弧组成。如若我们把中国的城市当成节点,连接城市的国道当成弧,那么全国的公路干线网就是图论中所说的图。关于图的算法有许多,但最主要的是图的遍历算法,也就是怎样通过弧访问图的各个节点。




以中国公路网为例,我们从北京出发,看一看北京和哪些城市直接相连,好比说和天津、济南、石家庄、南京、沈阳、大同直接相连。我们可以依次访问这些城市,然后我们看看都有哪些城市和这些已经访问过的城市相连,好比说北戴河、秦皇岛与天津相连,青岛、烟台和济南相连,太原、郑州和石家庄相连等等,我们再一次访问北戴河这些城市,直到中国所有的城市都访问过一遍为止。这种图的遍历算法称为“广度优先算法”(BFS),由于它先要尽可能广地访问每个节点所直接连接的其他节点。


另外另有一种计谋是从北京出发,随便找到下一个要访问的城市,好比是济南,然后从济南出发到下一个城市,好比说南京,再访问从南京出发的城市,一直走到头。然后再往回找,看看中间是否有尚未访问的城市。这种方法叫“深度优先算法”(DFS),由于它是一条路走到黑。这两种方法都可以保证访问到全部的城市。


当然,不论接纳哪种方法,我们都应该用一个小本本,记录已经访问过的城市,以防一个城市访问多次或者遗漏哪个城市。


现在我们看看图论的遍历算法和搜索引擎的关系。


互联网实际上就是一张大图,我们可以把每一个网页看成一个节点,把那些超链接(Hyperlinks)看成连接网页的弧。许多读者可能已经注意到,网页中那些蓝色的、带有下划线的文字背后实际上藏着对应的网址,当你点下去的时间,浏览器是通过这些隐含的网址转到相应的网页中的。这些隐含在文字背后的网址称为“超链接”。有了超链接,我们可以从任何一个网页出发,用图的遍历算法,自动地访问到每一个网页并把它们存起来。完成这个功能的程序叫做网络爬虫,或者在一些文献中称为"机器人"(Robot)。世界上第一个网络爬虫是由麻省理工学院 (MIT)的学生马休.格雷(Matthew Gray)在 1993 年写成的。他给他的程序起了个名字叫“互联网漫游者”("www wanderer")。以后的网络爬虫越写越复杂,但原理是一样的。


我们来看看网络爬虫怎样下载整个互联网。


假定我们从一家门户网站的首页出发,先下载这个网页,然后通过度析这个网页,可以找到藏在它里面的所有超链接,也就等于知道了这家门户网站首页所直接连接的全部网页,诸如雅虎邮件、雅虎财经、雅虎新闻等等。我们接下来访问、下载并剖析这家门户网站的邮件等网页,又能找到其他相连的网页。我们让计算机一直地做下去,就能下载整个的互联网。当然,我们也要纪录哪个网页下载过了,以免重复。在网络爬虫中,我们使用一个称为“哈希表”(Hash Table)的列表而不是一个记事本纪录网页是否下载过的信息。


现在的互联网极度巨大,不能仅通过一台或几台计算机服务器就能完成下载任务。好比雅虎公司(Google 没有公然公布我们的数目,所以我这里举了雅虎的索引大小为例)宣称他们索引了 200 亿个网页,如果下载一个网页需要一秒钟,下载这 200 亿个网页则需要 634 年。因此,一个商业的网络爬虫需要有成千上万个服务器,而且由快速网络连接起来。


怎样创建这样复杂的网络系统,怎样协调这些服务器的任务,就是网络设计和程序设计的艺术了。



原文发布时间为:2015-10-14

本文来自云栖社区合作伙伴“大数据文摘”,了解相关信息可以关注“BigDataDigest”微信公众号

相关文章
|
24天前
|
机器学习/深度学习 数据可视化
KAN干翻MLP,开创神经网络新范式!一个数十年前数学定理,竟被MIT华人学者复活了
【10月更文挑战第12天】MIT华人学者提出了一种基于Kolmogorov-Arnold表示定理的新型神经网络——KAN。与传统MLP不同,KAN将可学习的激活函数放在权重上,使其在表达能力、准确性、可解释性和收敛速度方面表现出显著优势,尤其在处理高维数据时效果更佳。然而,KAN的复杂性也可能带来部署和维护的挑战。论文地址:https://arxiv.org/pdf/2404.19756
31 1
|
4月前
|
存储 算法 Python
Python图论实战:从零基础到精通DFS与BFS遍历,轻松玩转复杂网络结构
【7月更文挑战第11天】图论在数据科学中扮演关键角色,用于解决复杂网络问题。Python因其易用性和库支持成为实现图算法的首选。本文通过问答形式介绍DFS和BFS,图是节点和边的数据结构,遍历用于搜索和分析。Python中图可表示为邻接表,DFS用递归遍历,BFS借助队列。DFS适用于深度探索,BFS则用于最短路径。提供的代码示例帮助理解如何在Python中应用这两种遍历算法。开始探索图论,解锁更多技术可能!
131 6
|
6月前
|
机器学习/深度学习 存储 算法
卷积神经网络(CNN)的数学原理解析
卷积神经网络(CNN)的数学原理解析
195 1
卷积神经网络(CNN)的数学原理解析
|
4月前
|
算法 安全 网络安全
支付系统,网络安全06----支付安全---,机密性,加密算法,目前最流行的加密算法,AES加密算法,目前最流行的非对称加密算法RSA,对称加密和非对称加密的优缺点,非对称加密是基于非常复杂的数学算法
支付系统,网络安全06----支付安全---,机密性,加密算法,目前最流行的加密算法,AES加密算法,目前最流行的非对称加密算法RSA,对称加密和非对称加密的优缺点,非对称加密是基于非常复杂的数学算法
|
6月前
|
机器学习/深度学习 算法 Python
LSTM(长短期记忆)网络的算法介绍及数学推导
LSTM(长短期记忆)网络的算法介绍及数学推导
126 0
|
11月前
|
算法
图论算法(最短路、网络流、二分图)
图论算法(最短路、网络流、二分图)
100 0
|
机器学习/深度学习 存储 移动开发
图神经网络的数学原理总结
图深度学习(Graph Deep Learning) 多年来一直在加速发展。本文将流行的图神经网络及其数学细微差别的进行详细的梳理和解释
13831 2
图神经网络的数学原理总结
|
机器学习/深度学习 编解码 数据可视化
深度学习基础入门篇[9.2]:卷积之1*1 卷积(残差网络)、2D/3D卷积、转置卷积数学推导、应用实例
深度学习基础入门篇[9.2]:卷积之1*1 卷积(残差网络)、2D/3D卷积、转置卷积数学推导、应用实例
深度学习基础入门篇[9.2]:卷积之1*1 卷积(残差网络)、2D/3D卷积、转置卷积数学推导、应用实例
|
机器学习/深度学习 人工智能 编解码
7 Papers & Radios | 用神经网络推开数学推理大门;世界首个宏基因组蛋白质图谱
7 Papers & Radios | 用神经网络推开数学推理大门;世界首个宏基因组蛋白质图谱
|
机器学习/深度学习 人工智能 JavaScript
中山大学HCP Lab团队:AI解题新突破,神经网络推开数学推理大门(三)
中山大学HCP Lab团队:AI解题新突破,神经网络推开数学推理大门
435 0
下一篇
无影云桌面