对于有多年编程经验的开发者来说,图的概念并不陌生。许多顶级公司在技术面试中测试对图论的理解。事实上,开发人员可以利用这些概念而无需处理高级问题。要理解这一点,我们可以从回顾为什么图是流行的数据结构以及如何在代码中实现它们开始。关系模型无论编码经验如何,开发人员都应该对数组和字典数据类型有一定的了解。这些集合是大多数语言中使用的标准概念,在呈现基于列表的内容时效果很好:大多数时候,列表是显示来自数据库或基于REST的查询的信息的完美解决方案。但是,有时列表需要提供存在相互关联上下文的记录。此时,将数据组织成图表就变得很方便了。对于图,主要目标不是列出信息(尽管可以做到),而是定义对象之间的关系。为什么定义对象之间的关系很有用?考虑以下示例。具有两个顶点和一条边的无向图(1)地图应用程序:如果在技术面试中被问到,您将如何组织数据以重新创建地图服务(例如Apple或Google地图)?除了在数据库中提供所有已知道路的列表之外,您创建的模型还需要根据一天中的时间、交通和单行道等因素确定到达目的地的最佳方式。要使大量数据发挥作用,您需要了解模型中一条道路与所有其他街道的关系。(2)社交媒体:社交媒体的价值通常以关注或关注用户的用户数量来衡量。像Twitter这样的在线平台,允许用户与任何人联系并接收他们的更新,吸引了大量用户。LinkedIn模型更为详细,因为除非收件人接受用户的连接请求,否则用户无法将某人添加到该用户的网络。在这种情况下,LinkedIn连接代表双向关系。同样,用户还可以搜索他们的网络,看看他们网络中是否有人与他们想要的工作机会有关。在此上下文中,“网络”可能暗示直接或间接连接。如此强大的模型不仅仅基于一个简单的列表,它还包含确定所有配置文件关联方式的智能。图组件现在我们已经了解了图在日常应用程序中的使用方式,让我们介绍一下构成图的组件。图中的节点称为顶点。虽然可以将图构建为单个顶点,但包含多个顶点的模型更能代表真实世界的应用程序。图中的对象通过称为边的连接相互关联。根据您的需要,一个顶点可以通过边连接到一个或多个对象,或者您可以创建一个没有边的顶点。最后,与堆栈或队列等其他标准结构不同,图通常没有指定的起点或终点。以下是一些示例图配置:具有两个顶点和一条边的无向图具有两个顶点和一条边的无向图具有两个顶点和一条边的无向图无向中的有向和无向在有向图中,源顶点之间的连接和目标是平等的。这些模型代表双向连接——类似于地图应用程序中的双向街道。要定义单向连通性,我们可以使用线和箭头将模型更新为有向图:三个顶点和三个边的有向图连接级别有时,我们必须表达图中顶点之间的连接程度。该技术适用于量化节点之间的距离、时间或严重性。权重通常与边缘相关联,是用于跟踪的比较变量。.三个顶点和三个边的有向图,其中边加权图顶点有了对图论的基本理解,让我们看看如何在代码中复制这些模型。下面我们创建一个支持自定义通用对象(T)的顶点。tvalue变量表示该类型包含的数据,包括单个字符串、int或自定义类型(例如,街道名称或社交媒体资料)。另外,请注意使我们的类型符合流行的Equatable协议(Swift)。这让我们可以在需要时比较特定的顶点实例是否相等。publicclassVertex
