数据结构-陈越
图(Graph)的定义
表示“多对多”的关系
- 线性表:一对一
- 树:一对多
- 线性表和树可以看作图的特殊情况
包含
- 一组顶点:V(Vertex)->有限非空
- 一组边:E(Edge->有限
- 边是顶点对 (v,win) ∈ \in ∈E,其中v.w ∈ \in ∈V
- 有向边<v,w>表示从v指向w的边
- 不考虑重边和有向边
(六度空间理论、最小生成树)
常见术语
无向图,有向图,网络(带权重)……
程序中表示图
邻阶矩阵
- 对角线为0
- 对称的(无向图)->浪费一半的空间
->用一维数组存一半的元素 - 省空间但是查找更复杂
网络则把值从1定义为权重
好处
- 简单直观
- 方便检查是否有边
- 查找顶点的邻接点
- 方便计算度(入度和出度)
- 无向图:对应行或者列非零元素个数 (无出入之分)
- 对应行非零是出度。列是入度 - 坏处
- 浪费空间(稀疏图)->稠密图合算
- 浪费时间eg统计边
邻接表
指针数组(一个数组,里面装的指针)
一个矩阵每行一个链表(二维矩阵的第二维是线性表而不是数组),只存非0元素
不唯一,顺序无所谓
够稀疏才合算
特点
- 方便查找任一顶点的”邻接点“
- 节约稀疏图空间
- 需要N个头指针+2*E个节点(每个节点至少2个域)
- 计算度
- 无向图:方便
- 有向图:出度only,入度:构造逆邻接表(因为这种二维矩阵无法竖着访问。只能再建造一个了)
- 不方便检查任意一对顶点间存在边
最后。图还有别的表达方法