《算法导论》习题解答 Chapter 22.1-5(求平方图)
来源:互联网 发布:精准扶贫数据平台网址 编辑:程序博客网 时间:2024/05/16 03:06
一、邻接矩阵实现
思路:如果是邻接矩阵存储,设邻接矩阵为A,则A*A即为平方图,只需要矩阵相乘即可;
伪代码:
for i=1 to nfor j=1 to nfor k=1 to nresult[i][j]+=matrix[i][k]*matrix[k][j];
算法复杂度
两个n维数组相乘,因此复杂度为O(V^3),当然可以通过Strassen算法稍加改进.
扩展:这种方法的作用是比如求u到v路径长度为k的路径数目,只需要求A^k,然后[u][v]即可。
算法正确性分析
命题:给定两点i,j,i,j路径长度为r的路径数目等于A^r[i][j].
数学归纳法证明,
当n=1时,A[i][j]表示i到j的路径长度为1的路径数目。
假设n=k时,i,j路径长度为k的路径数目等于A^k[i][j]成立,则当n=k+1时,A^k+1 = A^k *A
因此A^k+1[i][j]=A^k[i][1]*A[1][j]+A^k[i][2]*A[2][j]+.....+A^k[i][|V|]*A[|V|][j]
因此成立。
输入:
4 3a b b cc d
源代码:
package C22;public class C1_5 {public static void main(String[] args) throws Exception {Adjacent_Matrix adj_matrix = GraphFactory.getAdjacentMatrixInstance("input\\22.1-5.txt");int[][]result = getSquareGraph(adj_matrix);print(result);}public static int[][] getSquareGraph(Adjacent_Matrix g){int[][] matrix = g.getMatrix();int result[][] = new int[matrix.length][matrix.length];for(int i=0;i<matrix.length;i++){for(int j=0;j<matrix.length;j++){for(int k=0;k<matrix.length;k++){result[i][j] += matrix[i][k]*matrix[k][j];}}}return result;}public static void print(int[][] arr){for(int i=0;i<arr.length;i++){for(int j=0;j<arr.length;j++)System.out.print(arr[i][j]+" ");System.out.println();}System.out.println();}}
二、邻接表实现
伪代码:
for u=1 to |V| for each v 属于 Adj[u] Adj1[u].insertAll(Adj[v]); 对G'去除重边; //O(E^2)
复杂度:
1~3行的复杂度为O(V+E)
4行的复杂度为O(E^2),因为最多能够生成O(E^2)条边。
(原文点此,索引目录。感谢xiazdong君 && Google酱。这里是偶尔做做搬运工的水果君(^_^) )
- 《算法导论》习题解答 Chapter 22.1-5(求平方图)
- 《算法导论》习题解答 Chapter 22.1-6(求universal sink 通用汇点)
- 《算法导论》习题解答 Chapter 22.1-3(转置图)
- (搬运)《算法导论》习题解答 Chapter 22.1-1(入度和出度)
- 《算法导论》习题解答 Chapter 22.1-2(邻接矩阵与链表)
- 《算法导论》习题解答 Chapter 22.1-4(去除重边)
- 《算法导论》习题解答 Chapter 22.1-7(关联矩阵的性质)
- 《算法导论》习题解答 Chapter 22.1-8(变换邻接表的数据结构)
- 算法导论习题(python)Chapter One
- 【通告】算法导论习题解答
- 算法导论习题4-1-5 python解答
- 算法导论(3版)第5章少量习题的解答
- 算法导论动态规划课后习题解答
- 算法导论习题15.5-1解答
- 算法导论习题32.1-4解答
- 算法导论第三版4.1习题解答
- 算法导论课后习题部分解答
- 随机排列算法及《算法导论》5.3节习题解答
- 用PS对多张照片进行批处理的步骤
- 博弈分析(取石子游戏的数学问题)
- 《算法导论》习题解答 Chapter 22.1-4(去除重边)
- UVa11541 - Decoding
- (转载)cocos2d-X学习之主要类介绍:CCDirector
- 《算法导论》习题解答 Chapter 22.1-5(求平方图)
- CF 7D: Palindrome Degree
- 避免代码注释的五大理由
- [矩阵乘法][动态规划]Arrange the Schedule
- 关于qsort的比较函数的不同写法对于大数据造成的错误
- sprintf()函数
- 修改Linux内核启动图片
- 如何成就一只懒散的团队?
- linux程序安装包----动态链接库的自动编译与安装