《图算法》第二章 图论和概念

对图算法有兴趣的朋友可以关注微信公众号 :《 Medical与AI的故事》

原文链接:《图算法》第二章 图论和概念

 

在本章中,我们阐述了图算法的框架和术语。介绍图论的基本原理时,重点介绍与实践最相关的概念。

 

首先,我们将描述如何表示图,然后解释不同类型的图及其属性。这在以后的章节中很重要,因为我们的图的特性将指引我们的算法选择和解释结果。在本章的最后,我们将对本书后面章节的图算法的类型进行概览。

 

术语(Terminology)

 

带有标签属性(labled property)的图是最常用的图数据建模方法之一。一个标签(label)将节点(node)标记为某个组的成员之一。在图2-1中,我们有两组节点:人和车。(尽管在经典的图理论中,标签应用于单个具体的节点,但在本书的场景下,它通常用于表示节点组。)

《图算法》第二章 图论和概念_第1张图片

图2-1.带有标签属性的图模型是一种简单灵活的数据网络表示方法。

 

根据类型,我们可以把关系(Relationship)进行分类。比如,DRIVES、OWNS、LIVES_WITH以及MARRIED_TO关系类型。

 

属性(Properties, attribute)可以包含各种数据类型,从数字和字符串到空间和时间数据。在图2-1中,我们将属性表示为“属性名-值”(name-value pairs),其中属性的名称首先出现,然后是它的值。例如,左侧的Person节点有一个属性name:"Dan",而MARRIED_TO关系上有一个属性on:"2013年1月1日"。

 

一个相对较大图的一部分,可以叫做子图(subgraph)。比如当我们需要一个具有特定特性的子集来进行聚焦分析时,子图就很有用。

 

路径(Path)是一组节点加上它们之间的关系。图2-1中,比如,简单的路径可以包含节点Dan、Ann和Car以及DRIVES和OWNS关系。

 

图与图之间在类型、形状和大小以及可用于分析的属性各方面均不相同。接下来,我们将描述最适合图算法的图的分类法。请记住,这些名词解释不但适用于图,也适用于一个图的子图。

 

图的型和结构

 

在经典图论中,术语“图”等同于一个简单图(simple graph)或者严格图(strict graph),在这种图中,节点之间只有一个关系,如图2-2的左边第一个图所示。然而,大多数实际图在节点之间有许多关系,甚至有自引用关系。现在,“图”这个术语可以用于图2-2中的所有三种图形类型,因此也包含本书中提到的图。

《图算法》第二章 图论和概念_第2张图片

图2-2.在本书中,我们使用术语图(graph)来包含所有这些经典类型的图。

 

随机结构、小世界结构、自由缩放结构

图有许多形状。图2-3显示了三种具有代表性的网络类型:

  • 随机网络(random network)

  • 小世界网络(small-world network)

  • 自由缩放网络(scale-free network)

《图算法》第二章 图论和概念_第3张图片

图2-3.三种具有独特图和行为的网络结构

  • 随机网络是没有层级结构的,它的节点之间的连接完全平均分布。这种无形状的图形是“扁平的”,没有可辨别的模式。所有节点都具有与任何其他节点相同的连接概率。

  • 小世界网络在社交网络中极为常见;这种网络由局部的连接组成,并呈现出了一些“中心-辐射”的模式。“六度凯文培根”(Six Degrees of Kevin Bacon)游戏可能是小世界效应中最著名的例子。虽然你主要和一小群朋友交往,即使是著名的演员或是在地球的另一边的人,你与他们的距离都不会太远。

  • 当幂次法则存在的时候,且无论规模大小,都保留了“中心-辐射”架构时,这个网络就是一个自由缩放网络。比如万维网(world wide web)就是这样的例子。

 

这些网络类型产生了具有独特结构、分布和行为的图。当我们使用图算法时,我们将在我们的结果中认识到类似的模式。

 

图的风格(flavor)

 

为了充分利用图算法,我们必须熟悉将会遇到的图的最主要特性。表2-1总结了常见的图属性。在下面的部分中,我们将更详细地介绍不同的风格(或者说是图的属性,这和节点或关系的属性不同)。

表2-1 图的常用属性

图特性 关键因素 算法考量
连接(connected) vs 断开(disconnected) 在无论多远的任意两个节点之间是否存在路径 孤立的节点会导致不可预期的行为,比如在无连接的区域出现停顿或者错误
有权重(weighted) vs 无权重(unweighted) 是否在关系或者节点上有业务相关的赋值 许多算法依赖于权重,当权重被忽略的时候,我们会看到性能和结果上的巨大的差别
有向(directed) vs 无向(undirected) 是否关系被显性定义了起始节点和终止节点 它为推理出意义提供了丰富的上下文。在一些算法中,你可以显性地使用单向、双向或者干脆不设置方向
有环(cyclic) vs 无环(acyclic) 是否有路径的起始节点和终止节点是同一个节点 有环图很常见,但是算法需要特别注意,比如环会导致无法停止。无环图(或者说是生成树)是许多图算法的基础。
稀疏(sparse) vs 稠密(dense) 关系数量和节点数量的比值 特别稀疏或者稠密的图都会导致异常的结果。在数据建模中,要确保业务领域的图避开极端稠密和极端稀疏
单分(mono-partite) vs 二分(bi-partite) vs k-分(k-partite) 是否节点只连接向一种类型的节点或者是多种类型的节点 有助于创建分析中用的关系,也有助于投影出更有用的子图

 

连通图(Connected graphs)和断开的图(Disconnected graphs)

 

如果所有节点之间都有可连通的路径,那么这个图就是连通图。如果在图中有孤岛,它就是断开的图。如果这些岛上的节点是相互连接的,则称这个岛为图的组件(component),或者叫做集群(cluster),如图2-4所示。

《图算法》第二章 图论和概念_第4张图片

图2-4.如果图中有孤岛,它就是一个断开的图。

 

有些算法在断开的图上运行,会产生误导性的结果。为了避免意外发生,检查图的连通结构是很好的第一步。

 

加权图(weighted graphs)和无权图(unweighted graphs)

 

无权图没有为其节点或关系指定权重值。对于加权图,这些值可以表示各种度量,例如成本、时间、距离、容量,甚至是特定域的优先级。图2-5举了一个加权图和无权图的例子。

《图算法》第二章 图论和概念_第5张图片

图2-5.加权图可以保存关系或节点上的值。

 

基本的图算法可以使用权重来处理关系的强度或值。许多算法计算出一些指标,然后将其写入权重,以被后续处理使用。有些算法在查找累计总数、最小值或最佳值时会更新权重值。

 

加权图的一个典型用途是路径查找(pathfinding)算法。我们手机上的地图应用程序用的就是这种算法,比如计算位置之间最短/最便宜/最快的交通路线。图2-6展现了加权图和无权图上最短路径的差别。

《图算法》第二章 图论和概念_第6张图片

图2-6.对于其他相同的无权图和加权图,最短路径可能有所不同。

 

在没有权重的情况下,我们的最短路径是根据关系的数量(通常称为跃点,hop)来计算的。A和E有一条最短的路径是两个跃点(two-hop),它们之间只有一个节点(D)。然而,从A到E的最短加权路径是从A到C到D到E。如果权重以公里为单位来表示物理距离,则总距离为50公里。在这种情况下,跃点数最少的路径相当于70公里长的物理路径。

 

无向图(undirected graph)和有向图(directed graph)

 

在无向图中,关系被认为是双向的(例如,友谊)。在有向图中,关系有一个特定的方向。指向一个节点的关系被称为这个节点的入链(in-link),同样的,以某节点为起始节点的关系被称为这个节点的出链(out-link)。

方向(direction)增加了一个维度的信息。同一类型但方向相反的关系,代表了不同的语义,比如说,表示依赖或表示流向的关系。方向还可以用作信用或者群体强度的指标。用方向能够很好地表示个人偏好和社会关系。例如,在图2-7的有向图中,假定有向图是一个学生网络,关系是“喜欢”,那么我们将得出A和C更受欢迎。

《图算法》第二章 图论和概念_第7张图片

图2-7.许多算法在是否有方向上做了规定,只允许我们在入链或出链、两个方向或没有方向进行计算。

 

道路网络说明了我们为什么要同时使用这两种类型的图。例如,城市之间的公路经常是双向行驶。然而在城市里,有些道路是单行道。(某些信息流向也是如此!)

 

算法在有向图和无向图中运行,我们会得到不同的结果。在无向图中,例如高速公路或朋友间的友谊,我们假设所有的关系总是双向的。

 

如果将图2-7重新看作是一个定向道路网络的话,你可以从C和D行驶到A,但是之后只能通过C离开A。如果将A到C之关系断开,那么意味着A是一个死胡同。当然,这对于单向道路网络来说不太可能,但对于流程或网页来说却有可能发生。

 

有环图(cyclic graphs)和无环图(acyclic graphs)

 

在图论中,环是在从一个节点开始和并在同一个节点结束的路径。无环图中就没有这样的路径。如图2-8所示,有向图和无向图都可以有环。在有向图中,路径必须遵循关系的方向。graph 1是一个有向无环图(directed acyclic graph,DAG),它一定会有死胡同终端(dead end,也称为叶节点,leaf node)。

《图算法》第二章 图论和概念_第8张图片

图2-8.在无环图中,如果不倒退,是不可能形成在同一节点开始并结束的路径。

 

如果不重复走某一个关系,在graph 1和graph 2上都无法在同一节点上开始和结束,因此它们都是无环的。你可能记得在第一章中,不能重复的关系是在哥尼斯堡问题提出来的,这是整个图论的开始!图2-8中的graph 3显示了A-D-C-A之后的一个简单循环,而且路径中间没有重复节点。在graph 4中,通过添加一个节点和关系,使无向有环图变得更有趣。现在有一个闭合的环,环中还有一个重复的节点(C),遵循B-F-C-D-A-C-B。实际上,在graph 4中,有多个环存在。

 

环是常见的,我们有时需要通过切割关系,将有环图转换为无环图,以解决环处理的问题。有向无环图很自然地大量出现在调度、系谱和版本历史等场景中。

 

树(tree)

 

在经典图论中,无向无环图(undirected acyclic graph, UAG)称为树。但在计算机科学中,树也包含有向无环图(DAG)。一种更具包容性的树的定义是这样说的,在一个图中,其中任意两个节点仅有一条路径相连接,这样的图就称之为树。树对于理解图结构和许多算法都具有重要意义。它们在设计网络、数据结构和搜索优化以改进分类或组织层次结构方面发挥着关键作用。

关于树及其变种的报道很多。图2-9说明了我们可能遇到的常见树。

《图算法》第二章 图论和概念_第9张图片

图2-9.在这些典型的树图中,生成树最常用于图算法。

 

在这些变体中,生成树(spanning tree)是最适合本书的。生成树是某个较大的无环图的子图,它包含了父图的全部节点,但并不包含父图的所有关系。最小生成树指的是所有生成树中,用最少跃点数或最少路径权重就将全部节点连接起来的生成树。

 

稀疏图(sparse graphs)和稠密图(dense graphs)

 

图的稀疏度是基于它的关系数与最大可能的关系数(如果每对节点之间都有关系的话)进行比较的结果。每个节点都与其他节点有关系的图称为完全图(complete graph),或者称为组件集体图(a clique of component)。例如,如果我所有的朋友都认识,那就是一个小集体图。

 

图的最大密度是完全图中可能存在的关系数。用公式 Max D = n(n-1)/2计算,其中n是节点数。为了测量实际密度,我们使用公式d=2(R)/(n(n-1)),其中R是关系数。在图2-10中,我们可以看到三个无向图的实际密度。

《图算法》第二章 图论和概念_第10张图片

图2-10。检查图的密度可以帮助你评估意外结果。

 

虽然没有严格的分界线,但任何实际密度接近最大密度的图都被认为是稠密的。大多数基于真实网络的图趋向于稀疏,总节点与总关系的近似线性相关。尤其是在物理元素发挥作用的情况下,例如在一个点上可以连接多少电线、管道、道路或友谊的实际限制。

 

有些算法在极稀疏或极密集的图上执行时会返回无意义的结果。如果图太稀疏,则可能没有足够的关系让算法计算有用的结果。或者,由于节点之间的连接非常紧密,因此它们不会给出太多附加信息。高密度也会扭曲某些结果或增加计算的复杂性。在这种情况下,筛选出业务相关的子图再进行分析和计算,是一种实用的方法。

 

单分图(mono-partite graphs)、二分图(bi-partite graphs)和K-分图(k-partite graphs)

 

(这了的K-分,指的是有K种成分)

大多数网络都包含具有多个节点和关系类型的数据。然而,图算法通常只考虑一种节点类型和一种关系类型。具有一个节点类型和关系类型的图有时被称为单分图。

 

二分图是这样的一种图,它的节点可以分为两组,任何一个关系只能在两组之间进行连接。图2-11显示了这样一个图的例子。它有两个节点集:一类是观众,一类是电视节目。只有在两个组之间有关系,组内部没有关系。换句话说,在graph 1中,电视节目只与观众相关,而与其他电视节目无关,而且观众也不直接与其他观众相关。

 

从观众和电视节目的二分图开始,我们创建了两个单分投影:基于共同节目的观众连接(图2),以及基于共同观众的电视节目(图3)。我们还可以根据关系类型进行筛选,如监视、分级或审阅。

 

用推理出来的关系构建的投影单分图是图论分析的重要组成部分。这些类型的投影有助于揭示间接关系和品质。例如,在图2-11中的图2,Bev和Ann只看到一个共同的电视节目,而Bev和Evan有两个共同的电视节目。在图3中,我们通过共同的观众的观看次数来聚合电视节目之间的关系。这类指标,或者其他类似指标,可以用来推断观看Battlestar Galactica和Firefly等行为之间的意义。这可以得出我们给类似Evan这样的人的建议,他在图2-11中刚刚看完最后一集Firefly。

 

K-分图意味着我们的数据的节点类型是K。例如,如果我们有三种节点类型,我们会得到一个三分图(tripartite graph)。这只是扩展了二分图和单分图的概念来考虑更多的节点类型。许多现实世界的图,特别是知识图,有一个很大的K值,因为它们结合了许多不同的概念和信息类型。有许多使用大量节点类型的例子,比如,通过将一个配方集映射到一个成分集到一个化学化合物,然后推断出连接流行偏好的新混合,来创建新的配方。因此,我们可以通过泛化来减少节点类型的数量,例如,将许多形式的节点(如菠菜或羽衣甘蓝)视为“绿叶蔬菜”。

 

现在我们回顾了我们最可能使用的图的类型(或者说是风格),让我们来了解我们将在这些图上执行的图算法的类型。

《图算法》第二章 图论和概念_第11张图片

图2-11.二分图通常被投影到单分图上进行更具体的分析。

 

图算法类型

 

让我们来看看图算法的核心的三个分析领域。分别是,路径查找(Pathfinding)和搜索(searching)、中心性计算(centrality computation)和社区检测(community detection)算法的章节。

 

路径查找(pathfinding)

 

路径是图分析和算法的基础,因此我们将从这里开始我们的算法章节,并给出具体的算法示例。寻找最短路径可能是图算法执行的最频繁的任务,也是几种后续分析的先决条件。最短路径是跃点最少或权重最小的遍历路径。如果图是有向的,那么它是关系方向允许的两个节点之间的最短路径。

 

路径类型(Path Type)

平均最短路径(average shortest path)用于考虑网络的整体效率和弹性,例如理解地铁站之间的平均距离。

有时,我们可能还想了解最长路线的的优化结果。例如,在两个最远的地铁站之间,即使已经选择了最佳路线,还要确定哪个地铁站间相距较远,最多设置多少站等问题。

在这个场景下,我们将使用图的直径(diameter)来查找所有节点对之间最长的最短路径。

 

中心性(centrality)

 

中心性就是网络中哪些节点更重要。但我们所说的重要性是什么呢?有不同类型的中心性算法中,有不同的度量,例如,度量之一是在被连接的各个群体之间快速传播信息的能力。在本书中,我们将重点讨论节点和关系的结构。

 

社区检测(community detection)

 

连通性(connectedness)是图论的一个核心概念,它支持复杂的网络分析,如寻找社区。大多数现实网络都显示出或多或少独立子图的子结构(通常是准分形)。

 

连接特性(connectivity)被用于寻找社区和量化分组的品质。在图中评估不同类型的社区可以发现结构,如中心和层次结构,以及群体吸引或排斥他人的倾向。这些技术用于研究紧急现象,如导致回声室和过滤气泡效应。

 

总结

 

图是直观的。它们与我们思考和绘制系统的方式一致。一旦我们了解了术语和概念分层,图的使用原则就会很快被掌握。在本章中,我们解释了后面章节会用到的思想和定义,并描述了你会遇到的图的风格。

 

图论参考书

如果你很希望了解更多关于图论本身的知识,我们可以推荐如下的材料:

  • 由Richard J.Trudeau(Dover)撰写的《Introduction to Graph Theory》是一篇行文优美很耐心的导论。

  • 由Robin J.Wilson(Pearson)撰写的《Introduction to Graph Theory》(第五版)是一篇扎实的导论,有很好的插图。

  • Graph Theory and Its Applications,第三版,Jonathan L. Gross, Jay Yellen, 和Mark Anderson (Chapman and Hall),需要更多的数学背景,并提供了更多的细节和练习。

 

接下来,在深入研究如何在Apache Spark和Neo4j中使用图算法之前,我们先研究图处理和分析的类型。

你可能感兴趣的:(图算法,图算法,neo4j,图数据库)