IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 【霍罗维兹数据结构】GRAPHS - 图 -> 正文阅读

[数据结构与算法]【霍罗维兹数据结构】GRAPHS - 图

?


Ⅰ. 图的抽象数据类型 - THE GRAPH ABSTRACT DATA TYPE

0x00 引入:七桥问题

概念:最早可追溯到1736年,欧拉用图论解决了经典的七桥问题。

欧拉证明,如果要从图中的一个节点除法,经图中所有边一次且仅一次,最后回到出发的节点,那么当且仅当图中所有节点的度都是偶数。为了纪念欧拉的发现,我们称之为欧拉回路。

图是使用最广泛的数学结构,可应用于电路分析、寻找最短路径、项目规划、化合物鉴定、网络流程设计、基因/蛋白质相互作用等……

0x01?图的定义

一个图由两个集合构成:?

?V(G) :有限的、非空的顶点集合,?E(G) :有限的、可能是空的边缘集合。

我们可以将其写作 ?G=(V,E)?.

An undirected graph:each edge is represented as an unordered pair of vertices.

无向图的节点二元组是无序二元组? ?eg.??(v_0,v_1)?和?(v_1,v_0)? 表示同一条边。

A directed graph -- each edge is represented as a directed pair of vertices.

有向图的边是有序的节点二元组,用?<u,v>?表示,u?是边尾,v?是边头。 eg.?<u,v>?与?<v,u>?是两条不同的边。

这些图的集合表示为:

V(G_1)=\left \{ 0,1,2,3 \right \}? ? ? ? ? ? ? ? ? ? ???E(G_1)=\left \{ (0,1),(0,2),(0,3),(1,2),(1,3),(2,3) \right \}

V(G_2) = \left \{ 0,1,2,3,4,5,6 \right \}? ? ? ?? ??E(G_2)=\left \{ (0,1),(0,2),(1,3),(1,4),(2,5),(2,6) \right \}

V(G_3)=\left \{ 0,1,2 \right \}? ? ? ? ? ? ? ? ? ? ? ?? ?E(G_3)=\left \{ <0,1>,<1,0>,<1,2>\right \}

注意,有向图在边头标出箭头。G_2?是树,我们可以将树定义为图的一种特例 (G_1,G_3?不是树)

① No self loops:

图中不允许存在由节点?v?发出而只想自己的边,即不允许存在?(v,v)?的情况。

也就是说?(v,v)?不是图的合法边,这样的边我们称之为 环边?

② No multiple edges:

图中一般不重复出现同一条边,如果允许重复出现,那么这样的图称为 重复边图(multigraph)

Complete graph:

对于无向图,一个有?n?个顶点的完整图有?n(n-1)/2?条不同的边。

对于有向图,一个有?n?个顶点的完整图有?n(n-1)?条不同的边。?

一个有向图是强连通的(strongly connected),如果?V(G)?中的每一对不同的顶点,都有一条从?v_i?到?v_j?和?v_j?到?v_i??的有向路径。

A strongly connected component is a maximal subgraph which is strongly connected.

强连通分量是有向图中的最大强连通子图。

一个顶点的度是与该顶点相关的边的数量。

对于一个有向图,我们将一个顶点 v?的内度(in-degree)定义为以 v?为首的边的数量,而一个顶点 v?的外度(out-degree)定义为以 v?为尾的边的数量。

如果?d_i?是一个有?n?个顶点和?e?条边的图?G?中顶点?i?的度数,那么边的数量为:

e=\frac{1}{2}\sum_{i=0}^{n-1}d_i

0x02 图的ADT

Ⅱ. 图的表示

0x00 邻接矩阵 - Adjacency Matrix

令?G=(V,E)?为一个具有?n?个顶点的图,n\geq 1?

G?的邻接矩阵为一个 n\times n?的二维数组,比如 adj_mat,定义为:

adj_mat[i][j] = 1    if the edge ( , ) is in E(G)
                0    if there is no such edge.

这样的定义也可以用于有向图,只是?<v_i,v_j>?是有向的。

无向图的邻接矩阵是对称的,因为边?<v_i,v_j>?在?G?中,则边?<v_j,v_i>?也在?G?中。

对于无定向图,我们可以通过只存储矩阵的上三角或下三角来节省空间。

参考资料

Fundamentals of Data Structures in C

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-06-06 17:30:41  更:2022-06-06 17:32:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 1:54:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码