无向图(Undirected Graph)是图论中的一个术语,它由一组节点(Vertex)和一组边(Edge)组成,边无方向。无向图的存储方式有很多,比较常见的有邻接矩阵和邻接表两种。
邻接矩阵是一个二维数组,数组的行和列分别表示每个节点,数组元素的值表示两个节点之间的边的权重。如果两个节点之间无边相连,则用无穷大(或者一个较大的数)表示。这种存储方式的优点是方便查找和修改两个节点间的边,但是很浪费空间。因为对于一个有n个节点的图,邻接矩阵的大小是n*n,即使图中只有很少的边,也需要填太多的无效元素,造成很大的空间浪费。
邻接表是一种链表的集合,每个节点都对应一条链表,存储与它相邻的节点。具体地,邻接表的每一列元素都是一个链表,链表中的元素表示与该节点相连的边。这种存储方式的优点是空间效率很高,因为只需要分配每个节点所需的空间,以及和它相邻的边的空间,而且方便添加和删除边。但是查询和修改两个节点之间的边则比较慢,因为需要遍历链表。
由于邻接矩阵和邻接表各有优缺点,因此在实际应用中,也会采用它们的结合形式。比如,对于稠密图,用邻接矩阵存储比较好;而对于稀疏图,用邻接表存储比较好;对于介于稠密图和稀疏图之间的图,可以选择邻接矩阵和邻接表的混合存储方式。
除了邻接矩阵和邻接表之外,还有其他的存储方式,比如关联矩阵、压缩邻接矩阵、前向星和边数组等,不同的存储方式适合不同的场景和算法。
总之,无向图存储是图论的重要内容之一,它的选择应该根据实际情况进行合理的设计和选择。
扫码咨询 领取资料