热门标签 | HotTags
当前位置:  开发笔记 > 人工智能 > 正文

数据结构与算法基础:第六章图的基本概念

本文介绍了图的基本定义、术语及其分类,包括图的表示方法、顶点与边的关系、以及不同类型图的特点。
图的基本概念与术语

图是一种非线性数据结构,用于表示多对多的关系。它由一组顶点(或节点)和一组连接这些顶点的边组成。图的形式化定义如下:

  • 图 (Graph): G = (V, E),其中 V 是顶点集,E 是边集。
  1. V: 顶点集,是一个有限且非空的集合,每个元素称为顶点或节点。
  2. E: 边集,是一个有限的集合,每条边连接图中的两个顶点。
  • 无向图 (Undirected Graph): 图中的每条边都没有方向,即边 (v1, v2) 和 (v2, v1) 被视为同一条边。
  • 有向图 (Directed Graph): 图中的每条边都有明确的方向,即边 从 v1 指向 v2。

示例图

  • 完全图 (Complete Graph): 每一对不同的顶点之间都恰好有一条边相连的图。

完全图示例

  • 稀疏图 (Sparse Graph): 边的数量远少于顶点数量的平方,通常 e
  • 稠密图 (Dense Graph): 边的数量接近顶点数量的平方。
  • 网 (Network): 每条边上带有权重的图。
  • 邻接 (Adjacency): 若两个顶点之间存在一条边,则这两个顶点互为邻接点。
  • 关联 (Incidence): 边与顶点之间的关系。如果边 (v1, v2) 或 存在,则该边关联于顶点 v1 和 v2。
  • 顶点的度 (Degree of Vertex): 与某顶点关联的边的数量。在有向图中,顶点的度分为入度(以该顶点为终点的边数)和出度(以该顶点为起点的边数),记为 ID(v) 和 OD(v),总度数 TD(v) = ID(v) + OD(v)。
  • 路径 (Path): 一系列依次相邻的顶点构成的序列。
  • 路径长度 (Length of Path): 路径上边的数量或权重之和。
  • 回路 (Cycle): 起点和终点相同的路径。
  • 简单路径 (Simple Path): 除了起点和终点可以相同外,其他顶点均不重复出现的路径。
  • 简单回路 (Simple Cycle): 除了起点和终点相同外,其他顶点均不重复出现的回路。

路径和回路示例

  • 连通图 (Connected Graph): 在无向图中,任意两个顶点之间都存在至少一条路径。对于有向图,称为强连通图。
  • 子图 (Subgraph): 由原图的一部分顶点和边构成的新图。
  • 连通分量 (Connected Component): 无向图中的最大连通子图。即该子图是连通的,且无法通过添加更多顶点保持连通性。
  • 强连通分量 (Strongly Connected Component): 有向图中的最大强连通子图。即该子图是强连通的,且无法通过添加更多顶点保持强连通性。
  • 极小连通子图 (Minimal Connected Subgraph): 连通子图中去掉任何一条边都会导致子图不再连通。
  • 生成树 (Spanning Tree): 包含图中所有顶点的极小连通子图。
  • 生成森林 (Spanning Forest): 非连通图中,各连通分量的生成树组成的集合。

连通图与生成树示例

图的类型定义

图的抽象数据类型定义

图的抽象数据类型定义了图的基本属性和操作。常见的图操作包括创建图、添加顶点和边、查询顶点和边的信息等。

图的抽象数据类型定义

图的基本操作

图的基本操作包括但不限于:

  • 创建图
  • 添加顶点
  • 添加边
  • 删除顶点
  • 删除边
  • 查询顶点信息
  • 查询边信息
  • 遍历图

图的基本操作

图的存储结构

图的存储结构决定了图在计算机中的表示方式,常见的存储结构有邻接矩阵、邻接表等。


推荐阅读
  • 本文档旨在帮助开发者回顾游戏开发中的人工智能技术,涵盖移动算法、群聚行为、路径规划、脚本AI、有限状态机、模糊逻辑、规则式AI、概率论与贝叶斯技术、神经网络及遗传算法等内容。 ... [详细]
  • 本文通过探讨React中Context的使用,解决了在多层级组件间传递状态的难题。我们将详细介绍Context的工作原理,并通过实际案例演示其在项目中的具体应用。 ... [详细]
  • 三大Python学习利器网站推荐
    本文将介绍三个在Python学习过程中极为有用的网站,特别是对于初学者而言,这些资源能提供巨大的帮助。 ... [详细]
  • 精通C++并非易事,为何它比其他语言更难掌握?这主要归因于C++的设计理念,即不强迫用户接受特定的编程风格或限制创新思维。本文探讨了如何有效学习C++,并介绍了几本权威的学习资源。 ... [详细]
  • 本文介绍如何在指定的Module中通过配置build.gradle文件来生成自定义名称和路径的JAR文件,适用于Gradle 2.4及以上版本的Android Studio环境。 ... [详细]
  • 第4章-21判断上三角矩阵分析题目解法分析首先归结出判断上三角的函数的条件,定义为一个函数,以函数阶数和矩阵的列表作为参数。这里注意,列表作为参数的定义方法:defshangsan ... [详细]
  • 本文介绍如何在Ubuntu环境下为OpenWrt系统构建并安装首个'Hello World'应用程序的IPK包。文章不仅涵盖了基本的环境搭建,还详细说明了代码编写、Makefile配置及最终的IPK包生成与安装过程。 ... [详细]
  • 本文探讨了STL迭代器的最佳实践,包括iterator与const_iterator、reverse_iterator及其const版本之间的关系,以及如何高效地转换和使用这些迭代器类型。 ... [详细]
  • Git支持通过自定义钩子来扩展其功能,这些钩子根据触发条件的不同,可以分为客户端和服务器端两种类型。客户端钩子通常与本地操作相关联,如提交代码或合并分支;而服务器端钩子则与远程仓库的交互有关。 ... [详细]
  • addcslashes—以C语言风格使用反斜线转义字符串中的字符addslashes—使用反斜线引用字符串bin2hex—函数把包含数据的二进制字符串转换为十六进制值chop—rt ... [详细]
  • 使用Python爬虫技术从网页中提取图片链接的方法与示例
    本篇文章将详细介绍如何通过Python编程语言来实现从指定网页上抓取图片链接的功能,并提供了一个实用的代码示例。 ... [详细]
  • 随着暑假临近,为了充实假期生活并提升个人技能,我积极寻找实习机会。经过多轮筛选与准备,有幸参与了百度质量部的实习生面试。本文将分享此次面试经历及准备过程中的一些体会。 ... [详细]
  • 本文详细介绍了C#中的基本选择结构(如if、if-else、if-else-if及嵌套if)、switch结构、数组与循环控制结构(包括while、do-while、for和foreach循环)以及跳转语句(break和continue)。此外,还简要探讨了二重循环的应用和冒泡排序算法。 ... [详细]
  • 近期探讨了‘内部螺旋矩阵算法’的实现细节,并深入分析了面向对象编程中的可扩展性问题。基于这些讨论,本文通过引入桥梁设计模式对原有代码进行了优化与重构,以增强代码的灵活性和可维护性。 ... [详细]
  • 本文详细介绍了MySQL中的各种联结类型,包括自联结、自然联结、内部联结(等值联结)、外部联结(左联结、右联结、全外联结)以及交叉联结。每种联结方式都有其特定的应用场景和语法特点,了解这些可以帮助开发者更高效地编写SQL查询。 ... [详细]
author-avatar
安份丶小娚人
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有