当前位置:首页 > 文章列表 > 科技周边 > 人工智能 > 图论其实不难入门

图论其实不难入门

来源:51CTO.COM 2023-04-19 17:20:59 0浏览 收藏

珍惜时间,勤奋学习!今天给大家带来《图论其实不难入门》,正文内容主要涉及到等等,如果你正在学习科技周边,或者是对科技周边有疑问,欢迎大家关注我!后面我会持续更新相关内容的,希望都能帮到正在学习的大家!

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

关系模型

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

图论其实不难入门 

大多数情况下,列表是从数据库或基于 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/

本篇关于《图论其实不难入门》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于科技周边的相关知识,请关注golang学习网公众号!

版本声明
本文转载于:51CTO.COM 如有侵犯,请联系study_golang@163.com删除
哈佛大学砸场子:DALL-E 2只是「粘合怪」,生成正确率只有22%哈佛大学砸场子:DALL-E 2只是「粘合怪」,生成正确率只有22%
上一篇
哈佛大学砸场子:DALL-E 2只是「粘合怪」,生成正确率只有22%
Windows 11 与 Windows 7:现在值得升级吗?
下一篇
Windows 11 与 Windows 7:现在值得升级吗?
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    542次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    508次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    497次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    484次学习
查看更多
AI推荐
  • 毕业宝AIGC检测:AI生成内容检测工具,助力学术诚信
    毕业宝AIGC检测
    毕业宝AIGC检测是“毕业宝”平台的AI生成内容检测工具,专为学术场景设计,帮助用户初步判断文本的原创性和AI参与度。通过与知网、维普数据库联动,提供全面检测结果,适用于学生、研究者、教育工作者及内容创作者。
    12次使用
  • AI Make Song:零门槛AI音乐创作平台,助你轻松制作个性化音乐
    AI Make Song
    AI Make Song是一款革命性的AI音乐生成平台,提供文本和歌词转音乐的双模式输入,支持多语言及商业友好版权体系。无论你是音乐爱好者、内容创作者还是广告从业者,都能在这里实现“用文字创造音乐”的梦想。平台已生成超百万首原创音乐,覆盖全球20个国家,用户满意度高达95%。
    26次使用
  • SongGenerator.io:零门槛AI音乐生成器,快速创作高质量音乐
    SongGenerator
    探索SongGenerator.io,零门槛、全免费的AI音乐生成器。无需注册,通过简单文本输入即可生成多风格音乐,适用于内容创作者、音乐爱好者和教育工作者。日均生成量超10万次,全球50国家用户信赖。
    22次使用
  •  BeArt AI换脸:免费在线工具,轻松实现照片、视频、GIF换脸
    BeArt AI换脸
    探索BeArt AI换脸工具,免费在线使用,无需下载软件,即可对照片、视频和GIF进行高质量换脸。体验快速、流畅、无水印的换脸效果,适用于娱乐创作、影视制作、广告营销等多种场景。
    26次使用
  • SEO标题协启动:AI驱动的智能对话与内容生成平台 - 提升创作效率
    协启动
    SEO摘要协启动(XieQiDong Chatbot)是由深圳协启动传媒有限公司运营的AI智能服务平台,提供多模型支持的对话服务、文档处理和图像生成工具,旨在提升用户内容创作与信息处理效率。平台支持订阅制付费,适合个人及企业用户,满足日常聊天、文案生成、学习辅助等需求。
    27次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码