【Algorithms 4】算法(第4版)学习笔记 15 - 4.1 无向图

本文详细介绍了无向图的基本概念、常见应用、各种表示方法,重点阐述了深度优先搜索、广度优先搜索的实现过程以及连通分量的定义和示例。通过实例演示和Java代码展示,探讨了处理图结构的算法设计与应用挑战。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

来到书本后半部分的学习,视频对应到 Part Ⅱ 部分。书本第 4 章主要内容是图(Graph),本篇主要内容包括:图表介绍图表 API深度优先搜索广度优先搜索 以及 连通分量

参考目录

  • B站 普林斯顿大学《Algorithms》视频课
    (请自行搜索。主要以该视频课顺序来进行笔记整理,课程讲述的教授本人是该书原版作者之一 Robert Sedgewick。)
  • 微信读书《算法(第4版)》
    (本文主要内容来自《4.1 无向图》)
  • 官方网站
    (有书本配套的内容以及代码)

学习笔记

注1:下面引用内容如无注明出处,均是书中摘录。
注2:所有 demo 演示均为视频 PPT demo 截图。
注3:如果 PPT 截图中没有翻译,会在下面进行汉化翻译,因为内容比较多,本文不再一一说明。

Prof. Sedgewick 对本章节的开篇介绍:

Our topic today is algorithms for processing undirected graphs which are a model that are widely used for many, many applications.
今天我们讨论的主题是在计算机编程中处理无向图的算法,这类算法模型在很多很多应用中都有着广泛的应用。


We’ll look at three fundamental algorithms for processing undirected graphs and consider some of the challenges of developing algorithms for this kind of structure.
我们将关注用于处理无向图结构的三个核心算法,并考察在开发这类结构适用算法时所遇到的部分难题。

1:图表介绍

1.1:定义

在这里插入图片描述

:由边(edges)两两连接起来的顶点(vertexes)集合。

书中的定义:

定义。图是由一组顶点和一组能够将两个顶点相连的边组成的。

在这里插入图片描述

为什么学习图表算法?

  • 实际应用广泛多样。
    (数千种实际应用场合中都可以见到图算法的身影。)
  • 已知数百种不同的图算法。
    (在已有的知识体系中,有许多经过验证且有效的针对图问题的算法解决方案。)
  • 图是一种有趣且广泛应用的抽象概念。
    (它能将大量实际问题抽象成易于理解和处理的图形结构。)
  • 是计算机科学和离散数学中富有挑战性的分支。
    (研究图算法不仅有助于解决复杂问题,也有助于深入理解计算理论和数学原理。)

1.2:常见应用

在这里插入图片描述

图 (graph) 节点 (vertex) 边 (edge)
通信网络 (communication network) 电话、计算机 (telephone, computer) 光纤电缆 (fiber optic cable)
电路 (circuit) 门、寄存器、处理器 (gate, register, processor) 导线 (wire)
机械系统 (mechanical system) 关节 (joint) 杆、梁、弹簧 (rod, beam, spring)
金融网络 (financial network) 股票、货币 (stock, currency) 交易 (transactions)
交通网络 (transportation network) 交叉路口 (intersection) 街道 (street)
互联网 (internet) C类网络 (class C network) 连接 (connection)
游戏状态图 (game state graph) 盘面位置 (board position) 合法走步 (legal move)
社交关系网 (social relationship network) 个人 (person) 友谊关系 (friendship)
神经网络 (neural network) 神经元 (neuron) 突触 (synapse)
蛋白质交互网络 (protein interaction network) 蛋白质 (protein) 蛋白质-蛋白质相互作用 (protein-protein interaction)
分子结构 (molecular structure) 原子 (atom) 化学键 (bond)

1.3:术语

在这里插入图片描述

路径:一系列通过边相互连接的顶点构成的序列。
循环:起点与终点相同的路径。

如果两个顶点之间存在一条路径,则认为这两个顶点是相互连接的。

在这里插入图片描述

1.4:一些图表处理问题

在这里插入图片描述

问题 描述
s-t 路径 图中是否存在从 s 到 t 的路径?
最短 s-t 路径 s 和 t 之间的最短路径是什么?
循环 图中是否存在循环?
Euler 循环 图中是否存在恰好使用每条边一次的循环(回路)?
Hamilton 循环 图中是否存在恰好经过每个顶点一次的循环(回路)?
连通性 是否有一种方式能够连接所有顶点?
双连通性 是否存在一个顶点,移除该顶点后会导致图不连通?
可平面性 图能否在一个平面上画出而不产生任何交叉边?
图同构 两个邻接列表是否代表同一个图形结构?

挑战:哪些图处理问题是容易解决的?哪些是困难的?哪些是不可解的?

2:图表 API

2.1:图的表示

在这里插入图片描述

图的绘制:提供了对图结构直观的理解。

注意事项:直观理解可能具有误导性。

在这里插入图片描述

顶点表示方法

  • 本讲内容:采用范围从 0 至 V-1 的整数来表示顶点。
  • 实际应用:利用符号表实现顶点名称与整数标识间的相互转换。

2.2:无向图 API

在这里插入图片描述

2.3:典型图处理代码

在这里插入图片描述

2.4:图的几种表示方法

2.4.1:边集(边的数组) Set-of-edges

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MichelleChung

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值