每日学习一个数据结构-图

文章目录

    • 图基础
      • 一、图的定义
      • 二、图的相关概念
      • 三、图的分类
      • 四、图的使用场景
    • 和图相关的算法
      • 一、图的遍历算法
      • 二、最短路径算法
      • 三、最小生成树算法
      • 四、图匹配算法
      • 五、网络流算法

图基础

一、图的定义

在数学中,图是描述于一组对象的结构,其中某些对象对在某种意义上是“相关的”。这些对象对应于称为顶点的数学抽象(也称为节点或点),并且每个相关的顶点对都称为边(也称为链接或线)。通常,图形以图解形式描绘为顶点的一组点或环,并通过边的线或曲线连接。图(Graph)是由顶点的有穷非空集合和顶点之间的连线(边)的集合组成,通常表示为G=(V, E),其中G表示一个图,V(G)代表图G中的顶点集合,E(G)代表图G中的边集合。

二、图的相关概念

  1. :图G中点集V的大小称作图G的阶。

  2. 子图:当图G’=(V’,E’),其中V’包含于V,E’包含于E,则G’称作图G=(V,E)的子图。每个图都是本身的子图。

  3. 生成子图:指满足条件V(G’)=V(G)的G的子图G’。

  4. 导出子图

    • 以图G的顶点集V的非空子集V1为顶点集,以两端点均在V1中的全体边为边集的G的子图,称为V1导出的导出子图。
    • 以图G的边集E的非空子集E1为边集,以E1中边关联的顶点的全体为顶点集的G的子图,称为E1导出的导出子图。
  5. :一个顶点的度是指与该顶点相关联的边的条数,顶点v的度记作d(v)。

  6. 入度和出度:对于有向图来说,一个顶点的度可细分为入度和出度。一个顶点的入度是指与其关联的各边之中,以其为终点的边数;出度则是相对的概念,指以该顶点为起点的边数。

  7. 自环:若一条边的两个顶点为同一顶点,则此边称作自环。

  8. 路径:从u到v的一条路径是指一个序列v0,e1,v1,e2,v2,…ek,vk,其中ei的顶点为vi及vi-1,k称作路径的长度。如果它的起止顶点相同,该路径是“闭”的,反之,则称为“开”的。

  9. 简单路径:如果路径中除起始与终止顶点可以重合外,所有顶点两两不等,则称为简单路径。

  10. 行迹:如果路径P(u,v)中的边各不相同,则该路径称为u到v的一条行迹。

  11. 轨道:如果路径P(u,v)中的顶点各不相同,则该路径称为u到v的一条轨道。

  12. 回路和圈:闭的行迹称作回路(Circuit),闭的轨称作圈(Cycle)。

  13. :若去掉一条边,便会使得整个图不连通,该边称为桥。

三、图的分类

  1. 无向图和有向图

    • 无向图:边没有方向的图。在无向图中,边记作(vi,vj),它蕴涵着存在< vi,vj>和< vj,vi>两条弧。若无向图中有n个顶点,则最多有n(n-1)/2条弧。
    • 有向图:给图的每条边规定一个方向得到的图。在有向图中,边称作弧,含箭头的一端称为弧头,另一端称为弧尾。在有向图中,路径也是有向的。
  2. 简单图、多重图、完全图

    • 简单图:图中若不存在顶点到其自身的边,并且同一条边不会重复出现,这种图称为简单图。简单图分为简单无向图和简单有向图。
    • 多重图:图中某两个顶点之间的边数多于一条,或者顶点通过一条边和自己关联,这种图称为多重图。多重图分为多重无向图和多重有向图。数据结构中所讨论的图一般都是简单图。
    • 完全图:在无向图中,如果任意两个顶点之间都存在边,则称该图为无向完全图。含有n个顶点的无向完全图有n(n-1)/2条边。在有向图中,如果任意两个顶点之间都存在方向相反的两条弧,则称该图为有向完全图。含有n个顶点的有向完全图有n(n-1)条边。
  3. 稀疏图和稠密图:有很少条边或者弧的图称为稀疏图,反之称为稠密图。稀疏和稠密都是相对而言的,并不是一个精确的数值。

四、图的使用场景

图是一种非常重要的数据结构,在多个领域都有广泛的应用:

  1. 计算机科学:图论被广泛应用于算法设计中,如最短路径算法、网络流算法等。此外,图还是许多数据结构的基础,如邻接表、邻接矩阵等。
  2. 工程领域:在电路设计中,图可以用来表示电路元件之间的连接关系;在机械设计中,图可以用来表示零件之间的装配关系。
  3. 社会学:在社会网络分析中,图可以用来表示人与人之间的社会关系,如朋友关系、合作关系等。
  4. 生物学:在生物信息学中,图可以用来表示基因之间的相互作用关系、蛋白质之间的相互作用关系等。
  5. 经济学和金融学:图可以用来表示不同经济实体之间的交易关系、投资关系等。
  6. 地理信息系统:在GIS中,图可以用来表示地理实体之间的空间关系,如城市之间的交通网络、河流的流向等。

总的来说,图作为一种强大的工具,在各个领域都发挥着重要的作用。通过构建和分析图,人们可以更好地理解和解决复杂的问题。

和图相关的算法

图是一种重要的数据结构,由顶点(或节点)和边组成,用于表示对象及其相互之间的关系。以下是与图相关的一些经典算法:

一、图的遍历算法

  1. 广度优先搜索(BFS)
    search-width

    • 从起始节点开始,先访问所有相邻的节点,再依次访问这些相邻节点的未访问过的相邻节点,直到所有节点都被访问过。
    • 适用于寻找最短路径(未考虑边权)等问题。
    • 实现时通常使用队列数据结构。
  2. 深度优先搜索(DFS)
    search-deep

    • 从起始节点开始,沿着一个分支尽可能深地搜索,直到该分支的末端,然后回溯到上一个节点,继续搜索其他未访问的分支。
    • 适用于解决连通性问题、路径查找、图的遍历等问题。
    • 可以通过递归或显式栈来实现。
  3. A*算法

    • 启发式搜索算法,使用启发式函数来评估从源节点到目标节点的路径成本。
    • 通过优先队列来选择下一个要访问的节点,以找到最短路径。
    • 估值函数f(n)=g(n)+h(n),其中g(n)是从起始搜索点到当前点的代价,h(n)是当前结点到目标结点的估值。

二、最短路径算法

  1. Dijkstra算法

    • 解决单源最短路径问题,即求出给定顶点到其他任一顶点的最短路径。
    • 适用于加权图,且图中不包含负权边。
    • 算法依据最短路径的最优子结构性质,从起点开始,每一步都走最短的路径,并不断更新每个点到起点的最短距离。
  2. Bellman-Ford算法

    • 解决含负权图的单源最短路径问题。
    • 通过连续进行松弛操作来更新最短路径估计值。
    • 如果在n-1次松弛后还能更新,则说明图中有负环,因此无法得出结果。
  3. Floyd-Warshall算法

    • 解决任意两点间的最短路径问题。
    • 适用于所有类型的图,包括有向图和带负权边的图。
    • 算法通过考虑最佳子路径来得到最佳路径,使用邻接矩阵来储存边。

三、最小生成树算法

  1. Prim算法

    • 在加权连通图中搜索最小生成树。
    • 从任意一个顶点开始,逐步扩展生成树,每次选择权值最小的连接新顶点和生成树中顶点的边。
  2. Kruskal算法

    • 另一种求加权连通图的最小生成树的算法。
    • 基于贪心策略,首先将所有边按权值从小到大排序,然后依次选择边,如果选择的边不会形成环,则将其加入生成树中。

四、图匹配算法

  • 匈牙利算法

    • 在多项式时间内求解任务分配问题的组合优化算法。
    • 用于求解指派问题(assignment problem),算法时间复杂度为O(n^3)。
    • 适用于二分图的最大匹配问题。

五、网络流算法

  • Ford-Fulkerson算法

    • 用于计算流网络中的最大流量。
    • 流网络是一个有向图,其中每条边都有一个非负容量。
    • 算法通过寻找增广路径来不断更新流量,直到无法再找到增广路径为止。

这些算法在图论和网络分析中有着广泛的应用,包括网络路由、社交媒体分析、推荐系统等领域。根据具体问题的需求和图的结构特性,可以选择合适的算法来解决问题。

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

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

相关文章

YOLOv11模型地址

地址链接 项目Git地址&#xff1a;https://github.com/ultralytics/ultralytics?tabreadme-ov-file

大模型生成PPT大纲优化方案:基于 nVidia NIM 平台的递归结构化生成

大模型生成PPT大纲优化方案&#xff1a;基于 nVidia NIM 平台的递归结构化生成 待解决的问题 生成PPT大纲是一种大模型在办公场景下应用的常见需求。 然而&#xff1a; 目前直接让大模型生成大纲往往是非结构化的&#xff0c;输出格式多样&#xff0c;难以统一和规范&#…

Idea 2024.2.3 找不到Cache Recovery设置

idea找不到官网所说的设置 下面是解决办法 1.找到对应位置 2.增加配置文件内容 idea.is.internaltrue3.重启idea 4.查看结果 解决方案原文

Kubernetes(K8s)的简介

一、Kubernetes的简介 1 应用部署方式演变 在部署应用程序的方式上&#xff0c;主要经历了三个阶段&#xff1a; 传统部署&#xff1a;互联网早期&#xff0c;会直接将应用程序部署在物理机上 优点&#xff1a;简单&#xff0c;不需要其它技术的参与 缺点&#xff1a;不能为应…

MySQL 查询数据

MySQL 数据库使用SQL SELECT语句来查询数据。 你可以通过 mysql> 命令提示窗口中在数据库中查询数据&#xff0c;或者通过PHP脚本来查询数据。 语法 以下为在MySQL数据库中查询数据通用的 SELECT 语法&#xff1a; SELECT column_name,column_name FROM table_name [WHER…

OpenCV高级图形用户界面(5)获取指定滑动条(trackbar)的当前位置函数getTrackbarPos()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 返回滑动条的位置。 该函数返回指定滑动条的当前位置。 cv::getTrackbarPos() 函数用于获取指定滑动条&#xff08;trackbar&#xff09;的当前…

7-3 简单计算器

本题要求你为初学数据结构的小伙伴设计一款简单的利用堆栈执行的计算器。如上图所示&#xff0c;计算器由两个堆栈组成&#xff0c;一个堆栈 S1​ 存放数字&#xff0c;另一个堆栈 S2​ 存放运算符。计算器的最下方有一个等号键&#xff0c;每次按下这个键&#xff0c;计算器就…

GPT系列

GPT&#xff08;Generative Pre-Training&#xff09;&#xff1a; 训练过程分两步&#xff1a;无监督预训练有监督微调 模型结构是decoder-only的12层transformer 1、预训练过程&#xff0c;窗口为k&#xff0c;根据前k-1个token预测第k个token&#xff0c;训练样本包括700…

c++ 计算同一行上的最大点数(Count maximum points on same line)

示例图 给定二维平面上的 N 点作为一对 (x, y) 坐标&#xff0c;我们需要找到位于同一条线上的最大点数。 例子&#xff1a; 输入&#xff1a;points[] {-1, 1}, {0, 0}, {1, 1}, {2, 2}, {3, 3}, {3, 4} 输出&#xff1a;4 那么位于同一条线上的点…

专题十_穷举vs暴搜vs深搜vs回溯vs剪枝_二叉树的深度优先搜索_算法专题详细总结

目录 搜索 vs 深度优先遍历 vs 深度优先搜索 vs 宽度优先遍历 vs 宽度优先搜索 vs 暴搜 1.深度优先遍历 vs 深度优先搜索(dfs) 2.宽度优先遍历 vs 宽度优先搜索(bfs) 2.关系图暴力枚举一遍所有的情况 3.拓展搜索问题全排列 决策树 1. 计算布尔⼆叉树的值&#xff08;medi…

JAVA智能国际商城跨境电商系统小程序源码

智能国际商城跨境电商系统——全球购物&#xff0c;一触即达 &#x1f30d; 开篇&#xff1a;智能科技&#xff0c;重塑跨境购物新体验 在这个全球化的时代&#xff0c;跨境购物已经不再是遥不可及的事情。而“智能国际商城跨境电商系统”正是这样一款将智能科技与跨境电商完…

Badge插件的用法

文章目录 1 概念介绍2 实现方法3 示例代码我们在上一章回中介绍了WebView组件相关的内容,本章回中将介绍如何在图标旁边添加小红点.闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 在实际项目中有时候需要在图标旁边显示小红点,而且小红点内还有数字,比如购物车图标显示…

柯桥外语培训韩语学习考级韩语中TOPIK常用语法表达

-기 위해서는 -는 것이 좋다 为了......&#xff0c;......比较好 -는 것보다는 -는 것이 좋다 比起......&#xff0c;......比较好 -(으)려면 -아/어/야 한다 如果想......的话&#xff0c;得...... -왜냐하면 -기 때문이다 因为...... -그 이유는 -기 때문이다 理由是…

【JAVA面试题】Java和C++主要区别有哪些?各有哪些优缺点?

文章目录 强烈推荐前言区别&#xff1a;1. 语法和编程风格2.内存管理3.平台独立性4.性能5.指针和引用6.多线程7.使用场景 Java 的优缺点优点&#xff1a;缺点&#xff1a; C 的优缺点优点&#xff1a;缺点&#xff1a; 总结专栏集锦 强烈推荐 前些天发现了一个巨牛的人工智能学…

【第三版 系统集成项目管理工程师】第15章 组织保障

持续更新。。。。。。。。。。。。。。。 【第三版】第十五章 组织保障 15.1信息和文档管理15.1.1 信息和文档1.信息系统信息-P5462.信息系统文档-P546 15.1.2 信息(文档)管理规则和方法1.信息(文档)编制规范-P5472.信息(文档)定级保护-P5483.信息(文档)配置管理-P549练习 15.…

DP35 【模板】二维前缀和

文章目录 1.题目描述输入描述&#xff1a;输出描述&#xff1a; 示例1 2.思路3.代码 1.题目 DP35 【模板】二维前缀和 描述 给你一个 n 行 m 列的矩阵 A &#xff0c;下标从1开始。 接下来有 q 次查询&#xff0c;每次查询输入 4 个参数 x1 , y1 , x2 , y2 请输出以 (x1, …

大文件-分片下载

0.需求背景 文件过大&#xff0c;单次文件流数据过多需要有下载进度需要提高下载速度 1.大文件下载的解决思路 获取文件大小&#xff0c;根据实际网络情况设置分片大小&#xff0c;确定份数根据分片的大小索引&#xff0c;获取分片的流数据所有的分片下载后&#xff0c;合并…

计算机毕业设计 基于Flask+vue的博客系统的设计与实现 Python毕业设计 Python毕业设计选题 Flask框架 Vue【附源码+安装调试】

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

Python绘制--绘制心形曲线

今天&#xff0c;我们将通过Python代码来绘制一个心形曲线&#xff0c;这是一个经典的数学表达。 一、心形曲线的数学原理 心形曲线&#xff0c;也被称为心脏曲线&#xff0c;是一个代数曲线&#xff0c;可以通过参数方程定义。其数学表达式如下&#xff1a; x16sin⁡3(t)x16…

1,STM32CubeMX生成第一个freeRTOS工程

1&#xff0c;前言 本章内容是CubeMX工程配置freeRTOS的demo工程&#xff0c;后续其他本专栏文章中不再提及&#xff0c;默认在本章内容上完成。 单片机型号&#xff1a;STM32F407 编程环境 &#xff1a;STM32CubeMX Keil v5 2&#xff0c;STM32CubeMX新建工程 双击打开ST…