zoukankan      html  css  js  c++  java
  • 《算法导论》习题解答 Chapter 22.1-5(求平方图)

    一、邻接矩阵实现

    思路:如果是邻接矩阵存储,设邻接矩阵为A,则A*A即为平方图,只需要矩阵相乘即可;

    伪代码:

    for i=1 to n
    	for j=1 to n
    		for k=1 to n
    			result[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 3
    a b 
    b c
    c 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酱。这里是偶尔做做搬运工的水果君(^_^) )

  • 相关阅读:
    SQLHELPER C#
    SQL存储过程实例
    gridview css 样式及分页
    触发器
    MSsql存储过程
    解决在pc上用apk downloader插件下载谷歌play商店android应用出现的ssl错误
    VBScript输出显示双引号
    asp课堂更改读写权限值的实现
    1421. Credit Operations 夜
    sdut 1944 Flash Mob 夜
  • 原文地址:https://www.cnblogs.com/java20130723/p/3212121.html
Copyright © 2011-2022 走看看