【笔记】
要表示一个图G=(V,E),有两种标准的方法,即邻接表和邻接矩阵。
通常用邻接表表示稀疏图,|E|远小于|V|^2;用邻接矩阵表示稠密图,|E|接近于|V|^2,或必须很快判断两个给定顶点是否存在连接边时。
加权图,每条边都有相应的权值。
邻接表,空间Θ(V+E)。
邻接矩阵,空间Θ(V^2)。
无向图的邻接矩阵A就是它自己的转置矩阵:A=A^T。
【练习】
22.1-1 给定一个有向图的邻接表表示,计算该图中每个顶点的出度需要多少时间?计算每个顶点的入度需要多少时间?
O(V+E),O(V+E)
22.1-2 给出一个包含7个顶点的完全二叉树的邻接表表示,写出其等价的邻接矩阵表示。假设各个顶点如在一个二项堆中一样,从1到7编号。
略
22.1-3 有向图G=(V,E)的转置是图G^T=(V,E^T),其中E^T={ (v,u)∈V*V : (u,v)∈E },因此G^T就是将G中所有的边反向后形成的图。写出根据G计算出G^T的有效算法,并分析运行时间。
邻接矩阵:求矩阵转置 O(V^2)
邻接表:遍历每条边,重新建图 O(V+E)
22.1-4 给定一个多重图G=(V,E)的邻接表表示,给出一个具有O(V+E)时间的算法,来计算其等价的无向图G'(V,E')的邻接表表示,其中E'包含E中所有的边,且将两个顶点之间的所有多重边用一条边代表,并去掉E中所有的环。
用邻接矩阵避免重边和自环?中文版的翻译真是。。。
22.1-5 有向图G=(V,E)的平方是图G^2(V,E^2),该图满足下列条件:(u,w)∈E^2当且仅当对v∈V,有(u,v)∈E,且(v,w)∈E。亦即,如果图G中顶点u和w之间存在着一条恰好包含两条边的路径时,则G^2必包含该边(u,w)。针对图G的邻接表和邻接矩阵两种表示法,分别写出根据G产生G^2的有效算法,并分析给出算法的运行时间。
22.1-6 当采用邻接矩阵表示法时,大多数图算法需要的时间都是Ω(V^2),但也有一些例外。证明在给定了一个有向图G的邻接矩阵后,可以在O(V)的时间内,确定G中是否包含一个通用的汇,即入度为|V|-1、出度为0的顶点。
22.1-7 无自环的有向图G=(V,E)的关联矩阵B=(Bij)是一个|V|*|E|的矩阵,它满足下列条件:
如果边j离开顶点i,bij=-1。如果边j进入顶点i,bij=1。其它情况bij=0。
试描述矩阵乘积BB^T中各元素的含义,其中B^T为B的转置矩阵。
21.1-8 假设每个数组元素Adj[u]采用的不是链表,而是一个包含了所有满足(u,v)∈E的顶点v的散列表。如果所有的边查找都是等可能的,则确定某条边是否在图中所需的期望时间是多少?这种方案的不足是什么?请给出另一种表示每一个边列表的数据结构,以便解决这些不足。与散列表方案相比,有什么不足之处?
O(1),不能确定与V关联的边。