数据结构与算法 - 图

  • 博客主页:誓则盟约
  • 系列专栏:IT竞赛 专栏
  • 关注博主,后期持续更新系列文章
  • 如果有错误感谢请大家批评指出,及时修改
  • 感谢大家点赞👍收藏⭐评论✍ 

  1. 图的定义和基本概念

    • 图(Graph)是一种由顶点(Vertex,也称为节点 Node)和边(Edge)组成的数据结构。

      顶点是图中的基本元素,表示某个对象或实体。顶点可以用一个标识符来表示,例如一个数字或一个字符串。

      边则用于连接图中的顶点,表示顶点之间的关系。边可以是有向的,也可以是无向的。

      在无向图中,边没有方向,顶点之间的连接是双向的。如果顶点 v 和顶点 w 之间有一条无向边,那么我们可以说 v 和 w 是相邻的,并且从 v 可以到达 w ,从 w 也可以到达 v 。

      在有向图中,边是有方向的,从一个顶点指向另一个顶点。如果有一条从顶点 u 到顶点 v 的有向边,我们表示为 (u, v) ,那么可以说 u 是 v 的前驱,v 是 u 的后继。从 u 可以沿着边到达 v ,但从 v 不一定能直接到达 u ,除非存在另一条从 v 到 u 的有向边。

有向图(Directed Graph)和无向图(Undirected Graph)是图的两种主要类型,它们的主要区别在于边的方向性:

无向图
 

  • 边的特征:在无向图中,边没有方向,顶点之间的连接是双向的。如果存在一条连接顶点 u 和顶点 v 的边,那么既可以从 u 到达 v,也可以从 v 到达 u 。
  • 表示方法:通常用一对顶点来表示一条边,例如 (u, v) 表示顶点 u 和顶点 v 之间有一条边。由于边是无向的,所以 (u, v) 和 (v, u) 表示的是同一条边。
  • 应用场景:适用于表示顶点之间对称的关系,比如朋友关系(如果 A 是 B 的朋友,那么 B 也是 A 的朋友)。
  •  

    有向图

  • 边的特征:在有向图中,边是有方向的,从一个顶点指向另一个顶点。如果存在一条从顶点 u 到顶点 v 的有向边,那么只能从 u 沿着边的方向到达 v,而不能从 v 沿着这条边到达 u ,除非存在另一条从 v 到 u 的有向边。
  • 表示方法:用一个有序对来表示一条有向边,例如 (u, v) 表示从顶点 u 到顶点 v 的有向边,与 (v, u) 是不同的边。
  • 应用场景:常用于表示具有方向性的关系,比如网页中的链接(从一个网页指向另一个网页)、任务之间的依赖关系(一个任务必须在另一个任务完成后才能开始)等。

图的表示方法

  • 邻接矩阵是用一个二维矩阵来表示图的连接关系。矩阵的行和列都对应图的顶点。若顶点和顶点之间有边相连,矩阵中的值为(或边的权值),否则为。这种表示法简单直观,适用于顶点数较少的图。
  • 邻接表是一种用于表示图的常见数据结构。对于图中的每个顶点,使用一个链表或数组来存储与其相邻的顶点。

     

    具体来说,为图中的每个顶点创建一个链表(或动态数组)。链表(或数组)中的每个节点表示与该顶点相邻的一个顶点,并可以选择性地包含边的权值等信息。

图的遍历算法

        深度优先搜索(Depth-First Search,DFS)是一种图(或者树)的遍历算法。它从起始节点开始,沿着一条路径尽可能深地访问节点,直到无法继续或达到目标节点,然后回溯到上一个未完全探索的节点,继续探索其他路径。

DFS 的原理:

  • 选择一个起始节点并将其标记为已访问。
  • 对于该节点的未访问相邻节点,选择一个进行递归访问。
  • 重复上述过程,直到没有未访问的相邻节点,然后回溯。

DFS 的实现步骤:

  1. 访问起始节点,并将其标记为已访问。
  2. 对于起始节点的每个未访问相邻节点,进行递归的 DFS 调用。
  3. 当一个节点的所有相邻节点都已被访问,回溯到上一个节点,继续探索其他未访问的相邻节点。

以下是使用 Python 实现 DFS 的代码示例:

# 定义一个图(以邻接表的形式表示)
graph = {'A': ['B', 'C'],'B': ['D', 'E'],'C': ['F'],'D': [],'E': [],'F': []
}# 用于标记已访问的节点
visited = set()def dfs(node):if node in visited:returnvisited.add(node)print(node)for neighbor in graph[node]:dfs(neighbor)# 选择一个起始节点,例如 'A'
dfs('A')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/36992.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java+mysql图书管理系统

完整代码地址 1.运行效果图 2.主要代码 2.1.连接数据库 package com.my.homework.utils;import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException;public class JDBCUtils {public static Connection getConnection() throws Exception {…

点云处理实战 点云平面拟合

目录 一、什么是平拟合 二、拟合步骤 三、数学原理 1、平面拟合 2、PCA过程 四、代码 一、什么是平拟合 平面拟合是指在三维空间中找到一个平面,使其尽可能接近给定的点云。最小二乘法是一种常用的拟合方法,通过最小化误差平方和来找到最优的拟合平面。 二、拟合步骤…

keepalived脑裂和haproxy

1.用keepalived管理nginx服务 7-1和7-2配置 #安装nginx systemctl stop firewalld setenforce 0 yum install epel-release.noarch -y yum install -y nginx systemctl start nginxvim /etc/nginx/nginx.confupstream web {server 192.168.91.102;server 192.168.91.10…

笔记本电脑升级实战手册[1]:开始之前的准备与清单

文章目录 前言:一、升级流程1. 备份2. 清灰换硅脂3. 扩展内存与硬盘4. 硬盘设置5. 系统重装6. 升级后性能测试 二、升级清单1. 工具清单2. 升级清单 总结: 前言: 将要毕业之际,发现我的笔记本电脑已经陪我“征战沙场”快有四年之…

揭秘教学新利器:SmartEDA电路仿真软件,让电子学习更生动!

在数字化教育浪潮中,一款名为SmartEDA的电路仿真软件逐渐崭露头角,以其直观、易操作的特点,为电子学习领域带来了革命性的变化。今天,就让我们一起探讨如何使用SmartEDA进行教学,让电子学习变得更加生动有趣&#xff0…

Android源码——Handler机制(一)

Android源码——Handler机制(一) Handler机制概述介绍Handler机制模型Handler机制架构 Handler机制源码解析ActivityThreadLooperHandler Handler机制概述 介绍 Handler是Android消息机制的上层接口。Handler可以将一个任务切换到Handler所在的线程中去…

网络物理隔离后 可以用保密U盘进行数据安全交换吗?

企业用的保密U盘通常被设计用于存储和传输敏感信息,以确保数据的安全和保密性。 在网络之间实现了物理隔离后,使用保密U盘进行数据安全交换是一种常见的做法。物理隔离确保了两个网络之间的完全分离,因此使用保密U盘可以作为一种安全的手段来…

第1章 物联网模式简介---物联网概述

物联网模式简介 物联网(IoT)在最近几年获得了巨大的吸引力,该领域在未来几年将呈指数级增长。这一增长将跨越所有主要领域/垂直行业,包括消费者、家庭、制造业、健康、旅游和运输。这本书将为那些想了解基本物联网模式以及如何混…

【大模型】大模型微调方法总结(四)

1. P-Tuning v1 1.背景 大模型的Prompt构造方式严重影响下游任务的效果。比如:GPT-3采用人工构造的模版来做上下文学习(in context learning),但人工设计的模版的变化特别敏感,加一个词或者少一个词,或者变…

用英文介绍美国总统Trump: Donald J. Trump Twice Impeached (2017 – 2021)

Donald J. Trump: Twice Impeached (2017 – 2021) Link: https://www.youtube.com/watch?vJ7RC2DKf6rs&listPLybg94GvOJ9E-ZM1U6PAjgPUmz-V4-Yja&index45 Summary Summary of Donald Trump’s Rise and Presidency Donald John Trump, originally from Queens, Ne…

网页中如何接入高德地图【静态地图篇】

接入高德地图 登录高德开放平台创建应用添加key创建静态地图文档说明markers 网页应用总结 登录高德开放平台 高德开放平台 创建应用 点击我的应用 -> 创建应用 添加key 调相关接口都需要用到这个key! 创建静态地图 静态地图API文档 文档说明 服务地址…

ArmSoM-Sige7/5/1 和树莓派5规格比较

引言 在当今快速发展的嵌入式系统领域,选择一款性能强大、功能丰富的开发板对于项目的成功至关重要。本文将介绍并比较 Sige7、Sige5、Raspberry Pi 5 和 Sige1 这四款开发板的关键规格和特性,帮助开发者和爱好者选择最适合其需求的平台。 ArmSoM-Sige…

使用模板方法设计模式封装 socket 套接字并实现Tcp服务器和客户端 简单工厂模式设计

文章目录 使用模板方法设计模式封装套接字使用封装后的套接字实现Tcp服务器和客户端实现Tcp服务器实现Tcp客户端 工厂模式 使用模板方法设计模式封装套接字 可以使用模块方法设计模式来设计套接字 socket 的封装 模板方法(Template Method)设计模式是一…

【深度学习】深度学习基础

李宏毅深度学习笔记 局部极小值与鞍点 鞍点其实就是梯度是零且区别于局部极小值和局部极大值的点。 鞍点的叫法是因为其形状像马鞍。鞍点的梯度为零,但它不是局部极小值。我们把梯度为零的点统称为临界点(critical point)。损失没有办法再下…

Docker Desktop 简易操作指南 (Windows, macOS, Linux)

1. 下载最新版本 Docker Desktop https://www.docker.com/products/docker-desktop/ 2.启动 Docker Desktop 3.常用命令(在 cmd 或 Terminal 中执行) #列出所有镜像(Images) docker images #列出所有容器(Containers&…

CSS 核心知识点 - grid

思维导图 参考网址: https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_grid_layout 一、什么是 grid? CSS Grid布局是在CSS3规范中引入的一种新的布局方式,旨在解决传统布局方法(如浮动、定位、表格布局)存在的许多问题。C…

DataWhale-吃瓜教程学习笔记(四)

学习视频:第3章-二分类线性判别分析_哔哩哔哩_bilibili 西瓜书对应章节: 3.4 文章目录 - 算法原理- 损失函数推导-- 异类样本中心尽可能远-- 同类样本方差尽可能小-- 综合 知识点补充 - 二范数二范数(2-norm)详解定义几何意义性质…

OpenHarmony开发实战:HDF驱动开发流程

概述 HDF(Hardware Driver Foundation)驱动框架,为驱动开发者提供驱动框架能力,包括驱动加载、驱动服务管理、驱动消息机制和配置管理。并以组件化驱动模型作为核心设计思路,让驱动开发和部署更加规范,旨在…

四川赤橙宏海商务信息咨询有限公司抖音开店靠谱吗?

在数字化浪潮席卷全球的今天,电商行业正以前所未有的速度发展。而在这个大潮中,四川赤橙宏海商务信息咨询有限公司凭借其专业的团队和前瞻性的战略眼光,专注于抖音电商服务,为广大商家提供了一站式解决方案,成为了行业…

Ubuntu20.04安装LibTorch并完成高斯溅射环境搭建

0. 简介 最近受到优刻得的使用邀请,正好解决了我在大模型和自动驾驶行业对GPU的使用需求。UCloud云计算旗下的Compshare的GPU算力云平台。他们提供高性价比的4090 GPU,按时收费每卡2.6元,月卡只需要1.7元每小时,并附带200G的免费…