0

0

图论其实不难入门

王林

王林

发布时间:2023-04-13 09:40:04

|

2280人浏览过

|

来源于51CTO.COM

转载

对于有多年的编程经验的开发者来说,图的概念并不陌生。许多顶级公司在技术面试中测试对图论的理解。 其实,开发者无需处理高级问题即可利用这些概念。要想明白这一点,我们可以先回顾一下为什么图是流行的数据结构以及如何在代码中实现它们。

关系模型

无论编码经验如何,开发者都应该对数组和字典的数据类型有所了解。 这些集合是大多数语言中使用的标准概念,在呈现基于列表的内容时效果很好:

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

图论其实不难入门 

大多数情况下,列表是从数据库或基于 REST 的查询中显示信息的完美解决方案。 然而,有时列表需要提供存在相互关联的上下文的记录。此时,将数据组织为图表变得方便。

对于图表,主要目标不是列出信息(尽管这一点可以做到),而是定义对象之间的关系。为什么定义对象之间的关系会有用?不妨看看以下几个例子。

图论其实不难入门 

一个有两个顶点和一个边的无向图

(1)地图应用程序

如果在技术面试中被问到,你将如何组织数据,以便重新创建地图服务(如 Apple 或 Google Maps)?除了在数据库中提供所有已知道路的列表外,你创建的模型还需要根据一天中的时间、交通和单行道等因素确定到达目的地的最佳方式。要使这大量的数据有效,您需要知道一条道路与模型中的所有其他街道之间的关系。

(2)社交媒体

一个社交媒体的价值,通常由用户关注或关注用户的人数来衡量。像Twitter这样的网络平台可以让用户与任何人联系,并接收他们的最新动态,从而吸引了大量用户。

 LinkedIn模型更为详细,因为除非接收者接受用户的连接请求,否则用户无法将某人添加到该用户的网络中。在这种情况下,LinkedIn连接代表双向关系。顺着这个思路,用户也可以搜索其人际网络中是否有人与其想要的工作机会相关联。在这种情况下,“网络”可能意味着直接或间接的联系。这样一个强大的模型不仅仅是基于一个简单的列表,它还包含了确定所有配置文件如何关联的智慧。

图形组件

现在我们已经了解了图在日常应用程序中的使用方式,下面我们来介绍图的组成部分。

图中的节点称为顶点。虽然可以将图构建为单个顶点,但包含多个顶点的模型可以更好地代表现实世界的应用。

图中的对象通过称为边的连接相互关联。

根据您的需求,顶点可以通过边连接到一个或多个物体上,也可以创建一个没有边的顶点。

最后,与堆栈或队列等其他标准结构不同,图通常没有指定的起点或终点。 以下是一些示例图形配置:

图论其实不难入门 

一个有两个顶点和一个边的无向图

图论其实不难入门 

一个有两个顶点和一个边的无向图

图论其实不难入门 

一个有两个顶点和一个边的无向图

有向与无向

在无向图中,源顶点和目标之间的连接是相等的。这些模型代表双向连接——类似于地图应用程序中的双向街道。

要定义单向连接,我们可以使用线和箭头将模型更新为有向图:

图论其实不难入门 

三个顶点和三个边的有向图


连通性水平

有时,我们必须表示图中顶点之间的连接程度。这种技术在量化节点之间的距离、时间或严重性时效果很好。权值通常与一条边相关,是一个用于跟踪的比较变量。 。

图论其实不难入门 

三个顶点和三个边的有向图,其中边加权

 

图顶点

有了对图论的基本了解后,让我们看看如何在代码中复制这些模型。下面我们创建了一个支持自定义通用对象 (T) 的顶点。 tvalue变量表示该类型保存的数据,包括单个字符串、int或自定义类型(例如,街道名称或社交媒体资料)。

另外,注意要让我们的类型符合流行的Equatable协议 (Swift)。这可以让我们在需要时比较特定顶点实例是否相等。

public class Vertex  : Equatable {

​var tvalue: T?
​var neighbors = Array>()
​let uuid = UUID()

​public init(with name: T) {
self.tvalue = name
​}

​//equatable conformance
​public static func == (lhs: Vertex, rhs: Vertex) -> Bool {
return lhs.uuid == rhs.uuid
​}
}


 

邻接表

邻接表表示与其他顶点的连接。如前面所述,每个顶点可以连接到一个或多个邻接的点。 这种关系列表有时称为“邻接表”,可以用来解决许多高级问题。

var neighbors = Array>()


图边

在创建顶点时,我们添加了一个邻接属性来存储自定义边类型的数组。 下面一条边为后续的相邻顶点及其潜在的边的权值提供参考。

public class Edge  {

​var neighbor: Vertex
​var weight: Int

​init() {
weight = 0
self.neighbor = Vertex()
​}
}


构建画布

有了顶点和边对象,我们现在可以将它们添加到中央存储结构中,我们称之为图形画布。尽管我们的画布在技术上是一个数组,但我们的目标是将集合可视化为一组关系。 借助addVertex 函数,我们可以向画布添加单个通用顶点,同时addEdge方法可提供边所需的参考信息。

最后,我们的代码假设图是有向的,因为边(仅)被添加到源顶点邻接表中。

public class Graph  {

​var canvas: Array>

public init() {
canvas = Array()
​}

​//add vertex to graph canvas
​public func addVertex(element: Vertex) {
canvas.append(element)
​}
/add edge
​public func addEdge(source: Vertex, neighbor: Vertex, weight: Int) {

//create a new edge
let newEdge = Edge()

//connect source vertex to neighboring edge
newEdge.neighbor = neighbor
newEdge.weight = weight

source.neighbors.append(newEdge)
​}
}


总之,我们介绍了图的有关知识,并了解了如何使用它们来表示对象之间的关系,还回顾了配置图的几种方法以及用于描述不同模型的组件。

定义了模型后,我们就为更高级的功能奠定了基础,包括图形导航和遍历算法,如广度优先搜索。

译者介绍

康少京,51CTO社区编辑,目前从事通讯类行业,底层驱动开发岗位,研究过数据结构,Python,现对操作系统和数据库等相关领域感兴趣。

 原文标题:The complete beginner’s guide to graph theory,作者:Wayne Bishop

链接:

https://stackoverflow.blog/2022/05/26/the-complete-beginners-guide-to-graph-theory/

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Python 自然语言处理(NLP)基础与实战
Python 自然语言处理(NLP)基础与实战

本专题系统讲解 Python 在自然语言处理(NLP)领域的基础方法与实战应用,涵盖文本预处理(分词、去停用词)、词性标注、命名实体识别、关键词提取、情感分析,以及常用 NLP 库(NLTK、spaCy)的核心用法。通过真实文本案例,帮助学习者掌握 使用 Python 进行文本分析与语言数据处理的完整流程,适用于内容分析、舆情监测与智能文本应用场景。

10

2026.01.27

拼多多赚钱的5种方法 拼多多赚钱的5种方法
拼多多赚钱的5种方法 拼多多赚钱的5种方法

在拼多多上赚钱主要可以通过无货源模式一件代发、精细化运营特色店铺、参与官方高流量活动、利用拼团机制社交裂变,以及成为多多进宝推广员这5种方法实现。核心策略在于通过低成本、高效率的供应链管理与营销,利用平台社交电商红利实现盈利。

109

2026.01.26

edge浏览器怎样设置主页 edge浏览器自定义设置教程
edge浏览器怎样设置主页 edge浏览器自定义设置教程

在Edge浏览器中设置主页,请依次点击右上角“...”图标 > 设置 > 开始、主页和新建标签页。在“Microsoft Edge 启动时”选择“打开以下页面”,点击“添加新页面”并输入网址。若要使用主页按钮,需在“外观”设置中开启“显示主页按钮”并设定网址。

15

2026.01.26

苹果官方查询网站 苹果手机正品激活查询入口
苹果官方查询网站 苹果手机正品激活查询入口

苹果官方查询网站主要通过 checkcoverage.apple.com/cn/zh/ 进行,可用于查询序列号(SN)对应的保修状态、激活日期及技术支持服务。此外,查找丢失设备请使用 iCloud.com/find,购买信息与物流可访问 Apple (中国大陆) 订单状态页面。

124

2026.01.26

npd人格什么意思 npd人格有什么特征
npd人格什么意思 npd人格有什么特征

NPD(Narcissistic Personality Disorder)即自恋型人格障碍,是一种心理健康问题,特点是极度夸大自我重要性、需要过度赞美与关注,同时极度缺乏共情能力,背后常掩藏着低自尊和不安全感,影响人际关系、工作和生活,通常在青少年时期开始显现,需由专业人士诊断。

7

2026.01.26

windows安全中心怎么关闭 windows安全中心怎么执行操作
windows安全中心怎么关闭 windows安全中心怎么执行操作

关闭Windows安全中心(Windows Defender)可通过系统设置暂时关闭,或使用组策略/注册表永久关闭。最简单的方法是:进入设置 > 隐私和安全性 > Windows安全中心 > 病毒和威胁防护 > 管理设置,将实时保护等选项关闭。

6

2026.01.26

2026年春运抢票攻略大全 春运抢票攻略教你三招手【技巧】
2026年春运抢票攻略大全 春运抢票攻略教你三招手【技巧】

铁路12306提供起售时间查询、起售提醒、购票预填、候补购票及误购限时免费退票五项服务,并强调官方渠道唯一性与信息安全。

112

2026.01.26

个人所得税税率表2026 个人所得税率最新税率表
个人所得税税率表2026 个人所得税率最新税率表

以工资薪金所得为例,应纳税额 = 应纳税所得额 × 税率 - 速算扣除数。应纳税所得额 = 月度收入 - 5000 元 - 专项扣除 - 专项附加扣除 - 依法确定的其他扣除。假设某员工月工资 10000 元,专项扣除 1000 元,专项附加扣除 2000 元,当月应纳税所得额为 10000 - 5000 - 1000 - 2000 = 2000 元,对应税率为 3%,速算扣除数为 0,则当月应纳税额为 2000×3% = 60 元。

35

2026.01.26

oppo云服务官网登录入口 oppo云服务登录手机版
oppo云服务官网登录入口 oppo云服务登录手机版

oppo云服务https://cloud.oppo.com/可以在云端安全存储您的照片、视频、联系人、便签等重要数据。当您的手机数据意外丢失或者需要更换手机时,可以随时将这些存储在云端的数据快速恢复到手机中。

113

2026.01.26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
R 教程
R 教程

共45课时 | 5.6万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3万人学习

麻省理工大佬Python课程
麻省理工大佬Python课程

共34课时 | 5.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号