数据结构与算法 - 图

  • 博客主页:誓则盟约
  • 系列专栏: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 {…

Linux内核 -- Clocksource的注册与使用

Linux Clocksource 使用教程 本文档介绍了如何在Linux内核中实现和使用clocksource,并提供了内核态和用户态使用clocksource的示例代码。 1. Clocksource 驱动实现 以下是一个简单的基于周期计数器的clocksource驱动实现示例。 1.1 定义clocksource结构体 #inc…

使用SQLMap进行SQL注入测试

使用SQLMap进行SQL注入测试 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 什么是SQL注入? SQL注入是一种常见的Web应用程序安全漏洞&#xff0c…

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

目录 一、什么是平拟合 二、拟合步骤 三、数学原理 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…

2023-2024年中国人工智能算力的发展进行评估和分析报告

一、引言 随着人工智能技术的不断发展和应用,人工智能计算力已经成为推动人工智能产业发展的重要力量。本报告旨在对2023-2024年中国人工智能计算力的发展进行评估和分析,为相关企业和机构提供参考和决策依据。 二、人工智能发展迈入新阶段 全球:生成式人工智能兴起,产业步…

好久没有写博客了今天冒个泡记录一下这两个月的裸辞日记

辞职是2月份的事情了。目前已经4个月了。前2个月断断续续投简历面试,没有遇到太理想的公司。现在武汉的公司太卷了。什么技术也都得会。一个前端希望你会切图你会数据库。有的还希望你处理一下售前售后。双休的公司实在太少了,动不动就大小周。有个公司单…

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

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

【栈与队列】滑动窗口最大值

题目:给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 分析:首先我们可以发现滑动窗口的移动操作和队…

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

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

使用Python实现深度学习模型:强化学习与深度Q网络(DQN)

深度Q网络(Deep Q-Network,DQN)是结合深度学习与强化学习的一种方法,用于解决复杂的决策问题。本文将详细介绍如何使用Python实现DQN,主要包括以下几个方面: 强化学习简介DQN算法简介环境搭建DQN模型实现模型训练与评估1. 强化学习简介 强化学习是一种训练智能体(agent…

Android源码——Handler机制(一)

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

赶紧收藏!2024 年最常见的操作系统面试题(八)

上一篇地址:赶紧收藏!2024 年最常见的操作系统面试题(七)-CSDN博客 十五、什么是进程同步?请举例说明几种进程同步的方法。 进程同步是操作系统中用于控制多个进程或线程对共享资源的访问的一种机制。它确保在任何给…

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

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

android view 设置过 transalationY/X 后 marginTop/marginStart/Left 不变

在 Android 开发中,当你对一个视图(View)设置了 translationY 属性后,这个视图的 marginTop 属性实际上并不会改变。这是因为 translationY 只会影响视图的绘制位置,而不会改变视图的布局参数。换句话说,translationY 是一个运行时…

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

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

UNIAPP_在js文件中使用i18n国际化

导入 import { initVueI18n } from dcloudio/uni-i18n import messages from /locale/index const { t } initVueI18n(messages) 使用 t(config.request.i001).

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

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

MySQL存储引擎 INNODB和MYISAM

存储引擎概述 什么是存储引擎 是数据库底层软件组件,数据库管理系统使用数据索引进行创建、查询、更新和删除数据操作。不同的存储引擎提供不同的存储机制、索引技巧】锁定水平等功能,使用不同的存储引擎可以获得特定的功能 MySQL5.7支持的存储引擎 …

大数据面试之Hadoop

目录 介绍下Hadoop Hadoop的特点 说下Hadoop生态圈组件及其作用 Hadoop主要分哪几个部分?他们有什么作用? Hadoop 1.x,2x,3.x的区别 Hadoop集群工作时启动哪些进程?它们有什么作用? 在集群计算的时候,什么是集群的主要瓶颈 搭建Ha…