annotate lib/Graph/GraphMatrix.pm @ 0:4816e4a8ae95 draft default tip

Uploaded
author deepakjadmin
date Wed, 20 Jan 2016 09:23:18 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1 package Graph::GraphMatrix;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3 # $RCSfile: GraphMatrix.pm,v $
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4 # $Date: 2015/02/28 20:49:06 $
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5 # $Revision: 1.17 $
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
6 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
7 # Author: Manish Sud <msud@san.rr.com>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
8 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
9 # Copyright (C) 2015 Manish Sud. All rights reserved.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
10 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
11 # This file is part of MayaChemTools.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
12 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
13 # MayaChemTools is free software; you can redistribute it and/or modify it under
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
14 # the terms of the GNU Lesser General Public License as published by the Free
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
15 # Software Foundation; either version 3 of the License, or (at your option) any
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
16 # later version.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
17 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
18 # MayaChemTools is distributed in the hope that it will be useful, but without
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
19 # any warranty; without even the implied warranty of merchantability of fitness
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
20 # for a particular purpose. See the GNU Lesser General Public License for more
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
21 # details.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
22 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
23 # You should have received a copy of the GNU Lesser General Public License
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
24 # along with MayaChemTools; if not, see <http://www.gnu.org/licenses/> or
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
25 # write to the Free Software Foundation Inc., 59 Temple Place, Suite 330,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
26 # Boston, MA, 02111-1307, USA.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
27 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
28
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
29 use strict;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
30 use Carp;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
31 use Exporter;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
32 use Graph;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
33 use Matrix;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
34 use Constants;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
35
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
36 use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
37
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
38 @ISA = qw(Exporter);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
39 @EXPORT = qw();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
40 @EXPORT_OK = qw();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
41
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
42 %EXPORT_TAGS = (all => [@EXPORT, @EXPORT_OK]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
43
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
44 # Setup class variables...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
45 my($ClassName);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
46 _InitializeClass();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
47
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
48 # Overload Perl functions...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
49 use overload '""' => 'StringifyGraphMatrix';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
50
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
51 # Class constructor...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
52 sub new {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
53 my($Class, $Graph) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
54
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
55 # Initialize object...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
56 my $This = {};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
57 bless $This, ref($Class) || $Class;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
58 $This->_InitializeGraphMatrix($Graph);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
59
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
60 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
61 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
62
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
63 # Initialize object data...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
64 sub _InitializeGraphMatrix {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
65 my($This, $Graph) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
66
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
67 # Specified graph object...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
68 $This->{Graph} = $Graph;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
69
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
70 # Generated matrix...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
71 $This->{Matrix} = undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
72 $This->{MatrixType} = undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
73
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
74 # Row and columns IDs...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
75 @{$This->{RowIDs}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
76 @{$This->{ColumnIDs}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
77
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
78 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
79 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
80
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
81 # Initialize class ...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
82 sub _InitializeClass {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
83 #Class name...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
84 $ClassName = __PACKAGE__;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
85 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
86
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
87 # Generate the adjacency matrix for a simple graph.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
88 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
89 # For a simple graph G with n vertices, the adjacency matrix for G is a n x n square matrix and
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
90 # its elements Mij are:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
91 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
92 # . 0 if i == j
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
93 # . 1 if i != j and vertex Vi is adjacent to vertex Vj
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
94 # . 0 if i != j and vertex Vi is not adjacent to vertex Vj
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
95 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
96 sub GenerateAdjacencyMatrix {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
97 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
98 my($Graph, $NumOfVertices, @VertexIDs);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
99
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
100 # Get graph vertices...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
101 $Graph = $This->{Graph};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
102 @VertexIDs = $Graph->GetVertices();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
103 $NumOfVertices = scalar @VertexIDs;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
104
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
105 if ($NumOfVertices == 0) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
106 carp "Warning: ${ClassName}->GenerateAdjacencyMatrix: Specified graph doesn't contain any vertices: No matrix generated...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
107 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
108 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
109
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
110 # Create adjacency matrix...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
111 my($Matrix, $RowIndex, $ColIndex, $RowVertexID, $ColVertexID, $Value, $SkipIndexCheck);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
112
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
113 $Matrix = new Matrix($NumOfVertices, $NumOfVertices);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
114 $SkipIndexCheck = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
115
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
116 for $RowIndex (0 .. ($NumOfVertices - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
117 $RowVertexID = $VertexIDs[$RowIndex];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
118 for $ColIndex (0 .. ($NumOfVertices - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
119 $ColVertexID = $VertexIDs[$ColIndex];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
120 $Value = ($RowIndex == $ColIndex) ? 0 : ($Graph->HasEdge($RowVertexID, $ColVertexID) ? 1 : 0);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
121 $Matrix->SetValue($RowIndex, $ColIndex, $Value, $SkipIndexCheck);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
122 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
123 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
124 $This->_SetMatrixAndAssociatedInformation($Matrix, "AdjacencyMatrix", \@VertexIDs);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
125
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
126 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
127 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
128
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
129 # Generate the Siedel adjacency matrix for a simple graph.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
130 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
131 # For a simple graph G with n vertices, the Siedal adjacency matrix for G is a n x n square matrix and
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
132 # its elements Mij are:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
133 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
134 # . 0 if i == j
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
135 # . -1 if i != j and vertex Vi is adjacent to vertex Vj
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
136 # . 1 if i != j and vertex Vi is not adjacent to vertex Vj
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
137 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
138 sub GenerateSiedelAdjacencyMatrix {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
139 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
140 my($Graph, $NumOfVertices, @VertexIDs);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
141
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
142 # Get graph vertices...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
143 $Graph = $This->{Graph};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
144 @VertexIDs = $Graph->GetVertices();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
145 $NumOfVertices = scalar @VertexIDs;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
146
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
147 if ($NumOfVertices == 0) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
148 carp "Warning: ${ClassName}->GenerateSiedelAdjacencyMatrix: Specified graph doesn't contain any vertices: No matrix generated...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
149 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
150 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
151
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
152 # Create Siedel adjacency matrix...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
153 my($Matrix, $RowIndex, $ColIndex, $RowVertexID, $ColVertexID, $Value, $SkipIndexCheck);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
154
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
155 $Matrix = new Matrix($NumOfVertices, $NumOfVertices);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
156 $SkipIndexCheck = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
157
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
158 for $RowIndex (0 .. ($NumOfVertices - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
159 $RowVertexID = $VertexIDs[$RowIndex];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
160 for $ColIndex (0 .. ($NumOfVertices - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
161 $ColVertexID = $VertexIDs[$ColIndex];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
162 $Value = ($RowIndex == $ColIndex) ? 0 : ($Graph->HasEdge($RowVertexID, $ColVertexID) ? -1 : 1);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
163 $Matrix->SetValue($RowIndex, $ColIndex, $Value, $SkipIndexCheck);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
164 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
165 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
166 $This->_SetMatrixAndAssociatedInformation($Matrix, "SiedelAdjacencyMatrix", \@VertexIDs);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
167
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
168 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
169 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
170
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
171 # Generate distance matrix for a simple graph using Floyd-Marshall algorithm [Ref 67].
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
172 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
173 # For a simple graph G with n vertices, the distance matrix for G is a n x n square matrix and
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
174 # its elements Mij are:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
175 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
176 # . 0 if i == j
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
177 # . d if i != j and d is the shortest distance between vertex Vi and vertex Vj
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
178 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
179 # Note:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
180 # . In the final matrix, BigNumber values correspond to vertices with no edges.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
181 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
182 sub GenerateDistanceMatrix {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
183 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
184 my($Graph, $NumOfVertices, @VertexIDs);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
185
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
186 # Get graph vertices...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
187 $Graph = $This->{Graph};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
188 @VertexIDs = $Graph->GetVertices();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
189 $NumOfVertices = scalar @VertexIDs;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
190
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
191 if ($NumOfVertices == 0) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
192 carp "Warning: ${ClassName}->GenerateDistanceMatrix: Specified graph doesn't contain any vertices: No matrix generated...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
193 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
194 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
195
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
196 # Initialize matrix...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
197 my($Matrix, $MatrixValuesRef, $RowIndex, $ColIndex, $RowVertexID, $ColVertexID, $Value);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
198
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
199 $Matrix = new Matrix($NumOfVertices, $NumOfVertices);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
200 $MatrixValuesRef = $Matrix->GetMatrixValuesReference();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
201
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
202 for $RowIndex (0 .. ($NumOfVertices - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
203 $RowVertexID = $VertexIDs[$RowIndex];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
204 for $ColIndex (0 .. ($NumOfVertices - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
205 $ColVertexID = $VertexIDs[$ColIndex];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
206 $Value = ($RowIndex == $ColIndex) ? 0 : ($Graph->HasEdge($RowVertexID, $ColVertexID) ? 1 : BigNumber);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
207 $MatrixValuesRef->[$RowIndex][$ColIndex] = $Value;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
208 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
209 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
210
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
211 # Create distance matrix...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
212 my($i, $j, $k, $Valuejk);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
213
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
214 for $i (0 .. ($NumOfVertices - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
215 for $j (0 .. ($NumOfVertices - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
216 for $k (0 .. ($NumOfVertices - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
217 $Valuejk = $MatrixValuesRef->[$j][$i] + $MatrixValuesRef->[$i][$k];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
218 if ($Valuejk < $MatrixValuesRef->[$j][$k]) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
219 $MatrixValuesRef->[$j][$k] = $Valuejk;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
220 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
221 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
222 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
223 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
224 $This->_SetMatrixAndAssociatedInformation($Matrix, "DistanceMatrix", \@VertexIDs);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
225
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
226 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
227 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
228
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
229 # Generate the incidence matrix for a simple graph.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
230 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
231 # For a simple graph G with n vertices and e edges, the incidence matrix for G is a n x e matrix
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
232 # its elements Mij are:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
233 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
234 # . 1 if vertex Vi and the edge Ej are incident; in other words, Vi and Ej are related
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
235 # . 0 otherwise
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
236 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
237 sub GenerateIncidenceMatrix {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
238 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
239 my($Graph, $NumOfVertices, $NumOfEdges, @VertexIDs, @EdgeVertexIDs);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
240
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
241 # Get graph vertices and edges...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
242 $Graph = $This->{Graph};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
243 @VertexIDs = $Graph->GetVertices();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
244 $NumOfVertices = scalar @VertexIDs;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
245
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
246 @EdgeVertexIDs = $Graph->GetEdges();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
247 $NumOfEdges = @EdgeVertexIDs/2;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
248
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
249 if ($NumOfVertices == 0) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
250 carp "Warning: ${ClassName}->GenerateIncidenceMatrix: Specified graph doesn't contain any vertices: No matrix generated...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
251 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
252 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
253
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
254 # Create incidence matrix...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
255 my($Matrix, $RowIndex, $ColIndex, $EdgeVertexIndex, $VertexID, $EdgeVertexID1, $EdgeVertexID2, $Value, $SkipIndexCheck);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
256
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
257 $Matrix = new Matrix($NumOfVertices, $NumOfEdges);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
258
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
259 $SkipIndexCheck = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
260 for $RowIndex (0 .. ($NumOfVertices - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
261 $VertexID = $VertexIDs[$RowIndex];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
262 $EdgeVertexIndex = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
263 for $ColIndex (0 .. ($NumOfEdges - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
264 $EdgeVertexID1 = $EdgeVertexIDs[$EdgeVertexIndex]; $EdgeVertexIndex++;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
265 $EdgeVertexID2 = $EdgeVertexIDs[$EdgeVertexIndex]; $EdgeVertexIndex++;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
266
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
267 $Value = ($VertexID == $EdgeVertexID1 || $VertexID == $EdgeVertexID2) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
268 $Matrix->SetValue($RowIndex, $ColIndex, $Value, $SkipIndexCheck);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
269 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
270 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
271 $This->_SetMatrixAndAssociatedInformation($Matrix, "IncidenceMatrix", \@VertexIDs, \@EdgeVertexIDs);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
272
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
273 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
274 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
275
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
276 # Generate the degree matrix for a simple graph.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
277 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
278 # For a simple graph G with n vertices, the degree matrix for G is a n x n square matrix and
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
279 # its elements Mij are:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
280 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
281 # . deg(Vi) if i == j and deg(Vi) is the degree of vertex Vi
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
282 # . 0 otherwise
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
283 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
284 sub GenerateDegreeMatrix {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
285 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
286 my($Graph, $NumOfVertices, @VertexIDs);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
287
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
288 # Get graph vertices...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
289 $Graph = $This->{Graph};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
290 @VertexIDs = $Graph->GetVertices();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
291 $NumOfVertices = scalar @VertexIDs;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
292
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
293 if ($NumOfVertices == 0) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
294 carp "Warning: ${ClassName}->GenerateDegreeMatrix: Specified graph doesn't contain any vertices: No matrix generated...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
295 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
296 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
297
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
298 # Create degree matrix...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
299 my($Matrix, $Index, $VertexID, $Degree, $SkipIndexCheck);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
300
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
301 $Matrix = new Matrix($NumOfVertices, $NumOfVertices);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
302 $SkipIndexCheck = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
303
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
304 for $Index (0 .. ($NumOfVertices - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
305 $VertexID = $VertexIDs[$Index];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
306 $Degree = $Graph->GetDegree($VertexID);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
307 $Matrix->SetValue($Index, $Index, $Degree, $SkipIndexCheck);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
308 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
309 $This->_SetMatrixAndAssociatedInformation($Matrix, "DegreeMatrix", \@VertexIDs);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
310
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
311 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
312 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
313
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
314 # Generate the Laplacian matrix for a simple graph.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
315 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
316 # For a simple graph G with n vertices, the Laplacian matrix for G is a n x n square matrix and
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
317 # its elements Mij are:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
318 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
319 # . deg(Vi) if i == j and deg(Vi) is the degree of vertex Vi
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
320 # . -1 if i != j and vertex Vi is adjacent to vertex Vj
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
321 # . 0 otherwise
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
322 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
323 # Note: The Laplacian matrix is the difference between the degree matrix and adjacency matrix.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
324 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
325 sub GenerateLaplacianMatrix {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
326 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
327 my($Graph, $NumOfVertices, @VertexIDs);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
328
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
329 # Get graph vertices...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
330 $Graph = $This->{Graph};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
331 @VertexIDs = $Graph->GetVertices();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
332 $NumOfVertices = scalar @VertexIDs;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
333
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
334 if ($NumOfVertices == 0) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
335 carp "Warning: ${ClassName}->GenerateLaplacianMatrix: Specified graph doesn't contain any vertices: No matrix generated...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
336 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
337 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
338
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
339 # Create adjacency matrix...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
340 my($Matrix, $RowIndex, $ColIndex, $RowVertexID, $ColVertexID, $Value, $SkipIndexCheck);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
341
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
342 $Matrix = new Matrix($NumOfVertices, $NumOfVertices);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
343 $SkipIndexCheck = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
344
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
345 for $RowIndex (0 .. ($NumOfVertices - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
346 $RowVertexID = $VertexIDs[$RowIndex];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
347 for $ColIndex (0 .. ($NumOfVertices - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
348 $ColVertexID = $VertexIDs[$ColIndex];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
349 $Value = ($RowIndex == $ColIndex) ? $Graph->GetDegree($RowVertexID) : ($Graph->HasEdge($RowVertexID, $ColVertexID) ? -1 : 0);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
350 $Matrix->SetValue($RowIndex, $ColIndex, $Value, $SkipIndexCheck);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
351 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
352 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
353 $This->_SetMatrixAndAssociatedInformation($Matrix, "LaplacianMatrix", \@VertexIDs);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
354
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
355 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
356 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
357
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
358 # Generate the normalized Laplacian matrix for a simple graph.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
359 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
360 # For a simple graph G with n vertices, the normalized Laplacian matrix L for G is a n x n square matrix and
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
361 # its elements Lij are:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
362 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
363 # . 1 if i == j and deg(Vi) != 0
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
364 # . -1/SQRT(deg(Vi) * deg(Vj)) if i != j and vertex Vi is adjacent to vertex Vj
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
365 # . 0 otherwise
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
366 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
367 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
368 sub GenerateNormalizedLaplacianMatrix {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
369 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
370 my($Graph, $NumOfVertices, @VertexIDs);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
371
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
372 # Get graph vertices...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
373 $Graph = $This->{Graph};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
374 @VertexIDs = $Graph->GetVertices();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
375 $NumOfVertices = scalar @VertexIDs;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
376
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
377 if ($NumOfVertices == 0) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
378 carp "Warning: ${ClassName}->GenerateNormalizedLaplacianMatrix: Specified graph doesn't contain any vertices: No matrix generated...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
379 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
380 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
381
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
382 # Create adjacency matrix...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
383 my($Matrix, $RowIndex, $ColIndex, $RowVertexID, $ColVertexID, $RowVertexDegree, $ColVertexDegree, $Value, $SkipIndexCheck);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
384
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
385 $Matrix = new Matrix($NumOfVertices, $NumOfVertices);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
386 $SkipIndexCheck = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
387
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
388 for $RowIndex (0 .. ($NumOfVertices - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
389 $RowVertexID = $VertexIDs[$RowIndex];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
390 $RowVertexDegree = $Graph->GetDegree($RowVertexID);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
391 for $ColIndex (0 .. ($NumOfVertices - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
392 $ColVertexID = $VertexIDs[$ColIndex];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
393 $Value = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
394 if ($RowIndex == $ColIndex) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
395 $Value = ($RowVertexDegree == 0) ? 0 : 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
396 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
397 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
398 $ColVertexDegree = $Graph->GetDegree($ColVertexID);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
399 $Value = $Graph->HasEdge($RowVertexID, $ColVertexID) ? (-1/sqrt($RowVertexDegree * $ColVertexDegree)) : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
400 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
401 $Matrix->SetValue($RowIndex, $ColIndex, $Value, $SkipIndexCheck);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
402 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
403 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
404 $This->_SetMatrixAndAssociatedInformation($Matrix, "NormalizedLaplacianMatrix", \@VertexIDs);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
405
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
406 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
407 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
408
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
409 # Generate the admittance matrix for a simple graph.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
410 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
411 sub GenerateAdmittanceMatrix {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
412 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
413
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
414 $This->GenerateLaplacianMatrix();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
415 $This->{MatrixType} = "AdmittanceMatrix";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
416
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
417 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
418 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
419
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
420 # Generate the Kirchhoff matrix for a simple graph.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
421 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
422 sub GenerateKirchhoffMatrix {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
423 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
424
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
425 $This->GenerateLaplacianMatrix();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
426 $This->{MatrixType} = "KirchhoffMatrix";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
427
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
428 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
429 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
430
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
431 # Get generated matrix...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
432 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
433 sub GetMatrix {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
434 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
435
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
436 return $This->{Matrix};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
437 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
438
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
439 # Get matrix type...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
440 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
441 sub GetMatrixType {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
442 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
443
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
444 return $This->{MatrixType};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
445 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
446
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
447 # Get row IDs...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
448 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
449 sub GetRowIDs {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
450 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
451
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
452 return @{$This->{RowIDs}};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
453 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
454
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
455 # Get column IDs...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
456 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
457 sub GetColumnIDs {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
458 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
459
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
460 return @{$This->{ColumnIDs}};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
461 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
462
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
463
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
464 # Setup matrix and other associated information...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
465 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
466 sub _SetMatrixAndAssociatedInformation {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
467 my($This, $Matrix, $MatrixType, $VertexIDsRef, $EdgeVertexIDsRef) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
468
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
469 $This->{Matrix} = $Matrix;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
470 $This->{MatrixType} = $MatrixType;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
471
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
472 @{$This->{RowIDs}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
473 @{$This->{ColumnIDs}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
474
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
475 @{$This->{RowIDs}} = @{$VertexIDsRef};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
476
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
477 if ($MatrixType =~ /^IncidenceMatrix$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
478 # Setup column IDs using edge vertex IDs...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
479 my($NumOfEdges, $EdgeVertexIndex, $ColIndex, $EdgeVertexID1, $EdgeVertexID2, $EdgeID);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
480
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
481 $NumOfEdges = (scalar @{$EdgeVertexIDsRef})/2;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
482 $EdgeVertexIndex = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
483
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
484 for $ColIndex (0 .. ($NumOfEdges - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
485 $EdgeVertexID1 = $EdgeVertexIDsRef->[$EdgeVertexIndex]; $EdgeVertexIndex++;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
486 $EdgeVertexID2 = $EdgeVertexIDsRef->[$EdgeVertexIndex]; $EdgeVertexIndex++;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
487 $EdgeID = ($EdgeVertexID1 < $EdgeVertexID2) ? "${EdgeVertexID1}-${EdgeVertexID2}" : "${EdgeVertexID2}-${EdgeVertexID1}";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
488
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
489 push @{$This->{ColumnIDs}}, $EdgeID;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
490 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
491 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
492 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
493 push @{$This->{ColumnIDs}}, @{$VertexIDsRef};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
494 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
495 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
496 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
497
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
498 # Return a string containg data for GraphMatrix object...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
499 sub StringifyGraphMatrix {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
500 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
501 my($GraphMatrixString, $RowIDs);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
502
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
503 $GraphMatrixString = "GraphMatrix:";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
504
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
505 $GraphMatrixString .= (defined $This->{MatrixType}) ? " MatrixType: $This->{MatrixType}" : "MatrixType: <Undefined>";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
506 $GraphMatrixString .= (scalar @{$This->{RowIDs}}) ? "; RowIDs: @{$This->{RowIDs}}" : "; RowIDs: <Undefined>";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
507 $GraphMatrixString .= (scalar @{$This->{ColumnIDs}}) ? "; ColumnIDs: @{$This->{ColumnIDs}}" : "; ColumnIDs: <Undefined>";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
508
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
509 $GraphMatrixString .= (defined $This->{Matrix}) ? "; Matrix: $This->{Matrix}" : "; Matrix: <Undefined>";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
510
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
511 return $GraphMatrixString;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
512 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
513
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
514 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
515
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
516 __END__
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
517
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
518 =head1 NAME
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
519
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
520 GraphMatrix
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
521
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
522 =head1 SYNOPSIS
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
523
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
524 use Graph::GraphMatrix;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
525
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
526 use Graph::GraphMatrix qw(:all);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
527
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
528 =head1 DESCRIPTION
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
529
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
530 B<GraphMatrix> class provides the following methods:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
531
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
532 new, GenerateAdjacencyMatrix, GenerateAdmittanceMatrix, GenerateDegreeMatrix,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
533 GenerateDistanceMatrix, GenerateIncidenceMatrix, GenerateKirchhoffMatrix,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
534 GenerateLaplacianMatrix, GenerateNormalizedLaplacianMatrix,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
535 GenerateSiedelAdjacencyMatrix, GetColumnIDs, GetMatrix, GetMatrixType, GetRowIDs,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
536 StringifyGraphMatrix
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
537
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
538 =head2 METHODS
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
539
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
540 =over 4
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
541
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
542 =item B<new>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
543
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
544 $NewGraphMatrix = new Graph::GraphMatrix($Graph);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
545
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
546 Using specified I<Graph>, B<new> method creates a new B<GraphMatrix> and returns
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
547 newly created B<GraphMatrix>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
548
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
549 =item B<GenerateAdjacencyMatrix>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
550
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
551 $AdjacencyGraphMatrix = $GraphMatrix->GenerateAdjacencyMatrix();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
552
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
553 Generates a new I<AdjacencyGraphMatrix> for specified B<Graph> and returns
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
554 I<AdjacencyGraphMatrix>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
555
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
556 For a simple graph G with n vertices, the adjacency matrix for G is a n x n square matrix and
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
557 its elements Mij are:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
558
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
559 . 0 if i == j
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
560 . 1 if i != j and vertex Vi is adjacent to vertex Vj
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
561 . 0 if i != j and vertex Vi is not adjacent to vertex Vj
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
562
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
563 =item B<GenerateAdmittanceMatrix>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
564
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
565 $AdmittanceGraphMatrix = $GraphMatrix->GenerateAdmittanceMatrix();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
566
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
567 Generates a new I<AdmittanceGraphMatrix> for specified B<Graph> and returns
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
568 I<AdmittanceGraphMatrix>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
569
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
570 B<AdmittanceMatrix> is another name for B<LaplacianMatrix>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
571
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
572 =item B<GenerateDegreeMatrix>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
573
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
574 $DegreeGraphMatrix = $GraphMatrix->GenerateDegreeMatrix();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
575
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
576 Generates a new I<DegreeGraphMatrix> for specified B<Graph> and returns
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
577 I<DegreeGraphMatrix>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
578
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
579 For a simple graph G with n vertices, the degree matrix for G is a n x n square matrix and
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
580 its elements Mij are:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
581
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
582 . deg(Vi) if i == j and deg(Vi) is the degree of vertex Vi
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
583 . 0 otherwise
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
584
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
585 =item B<GenerateDistanceMatrix>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
586
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
587 $DistanceGraphMatrix = $GraphMatrix->GenerateDistanceMatrix();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
588
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
589 Generates a new I<DistanceGraphMatrix> for specified B<Graph> using Floyd-Marshall
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
590 algorithm [Ref 67] and returns I<DistanceGraphMatrix>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
591
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
592 For a simple graph G with n vertices, the distance matrix for G is a n x n square matrix and
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
593 its elements Mij are:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
594
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
595 . 0 if i == j
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
596 . d if i != j and d is the shortest distance between vertex Vi and vertex Vj
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
597
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
598 In the final matrix, value of constant B<BigNumber> defined in B<Constants.pm> module
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
599 corresponds to vertices with no edges.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
600
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
601 =item B<GenerateIncidenceMatrix>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
602
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
603 $IncidenceGraphMatrix = $GraphMatrix->GenerateIncidenceMatrix();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
604
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
605 Generates a new I<IncidenceGraphMatrix> for specified B<Graph> and returns
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
606 I<IncidenceGraphMatrix>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
607
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
608 For a simple graph G with n vertices and e edges, the incidence matrix for G is a n x e matrix
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
609 its elements Mij are:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
610
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
611 . 1 if vertex Vi and the edge Ej are incident; in other words, Vi and Ej are related
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
612 . 0 otherwise
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
613
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
614 =item B<GenerateKirchhoffMatrix>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
615
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
616 $KirchhoffGraphMatrix = $GraphMatrix->GenerateKirchhoffMatrix();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
617
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
618 Generates a new I<KirchhoffGraphMatrix> for specified B<Graph> and returns
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
619 I<KirchhoffGraphMatrix>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
620
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
621 B<KirchhoffMatrix> is another name for B<LaplacianMatrix>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
622
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
623 =item B<GenerateLaplacianMatrix>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
624
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
625 $LaplacianGraphMatrix = $GraphMatrix->GenerateLaplacianMatrix();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
626
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
627 Generates a new I<LaplacianGraphMatrix> for specified B<Graph> and returns
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
628 I<LaplacianGraphMatrix>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
629
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
630 For a simple graph G with n vertices, the Laplacian matrix for G is a n x n square matrix and
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
631 its elements Mij are:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
632
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
633 . deg(Vi) if i == j and deg(Vi) is the degree of vertex Vi
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
634 . -1 if i != j and vertex Vi is adjacent to vertex Vj
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
635 . 0 otherwise
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
636
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
637 The Laplacian matrix is the difference between the degree matrix and adjacency matrix.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
638
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
639 =item B<GenerateNormalizedLaplacianMatrix>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
640
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
641 $NormalizedLaplacianGraphMatrix = $GraphMatrix->GenerateNormalizedLaplacianMatrix();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
642
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
643 Generates a new I<NormalizedLaplacianGraphMatrix> for specified B<Graph> and returns
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
644 I<NormalizedLaplacianGraphMatrix>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
645
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
646 For a simple graph G with n vertices, the normalized Laplacian matrix L for G is a n x n square
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
647 matrix and its elements Lij are:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
648
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
649 . 1 if i == j and deg(Vi) != 0
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
650 . -1/SQRT(deg(Vi) * deg(Vj)) if i != j and vertex Vi is adjacent to vertex Vj
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
651 . 0 otherwise
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
652
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
653 =item B<GenerateSiedelAdjacencyMatrix>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
654
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
655 $SiedelAdjacencyGraphMatrix = $GraphMatrix->GenerateSiedelAdjacencyMatrix();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
656
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
657 Generates a new I<SiedelAdjacencyGraphMatrix> for specified B<Graph> and returns
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
658 I<SiedelAdjacencyGraphMatrix>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
659
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
660 For a simple graph G with n vertices, the Siedal adjacency matrix for G is a n x n square matrix and
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
661 its elements Mij are:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
662
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
663 . 0 if i == j
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
664 . -1 if i != j and vertex Vi is adjacent to vertex Vj
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
665 . 1 if i != j and vertex Vi is not adjacent to vertex Vj
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
666
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
667 =item B<GetColumnIDs>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
668
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
669 @ColumnIDs = $GraphMatrix->GetColumnIDs();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
670
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
671 Returns an array containing any specified column IDs for I<GraphMatrix>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
672
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
673 =item B<GetMatrix>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
674
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
675 $Matrix = $GraphMatrix->GetMatrix();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
676
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
677 Returns I<Matrix> object corresponding to I<GraphMatrix> object.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
678
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
679 =item B<GetMatrixType>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
680
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
681 $MatrixType = $GraphMatrix->GetMatrixType();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
682
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
683 Returns B<MatrixType> of I<GraphMatrix>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
684
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
685 =item B<GetRowIDs>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
686
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
687 @RowIDs = $GraphMatrix->GetRowIDs();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
688
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
689 Returns an array containing any specified rowIDs IDs for I<GraphMatrix>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
690
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
691 =item B<StringifyGraphMatrix>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
692
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
693 $String = $GraphMatrix->StringifyGraphMatrix();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
694
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
695 Returns a string containing information about I<GraphMatrix> object.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
696
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
697 =back
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
698
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
699 =head1 AUTHOR
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
700
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
701 Manish Sud <msud@san.rr.com>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
702
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
703 =head1 SEE ALSO
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
704
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
705 Constants.pm, Graph.pm, Matrix.pm
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
706
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
707 =head1 COPYRIGHT
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
708
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
709 Copyright (C) 2015 Manish Sud. All rights reserved.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
710
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
711 This file is part of MayaChemTools.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
712
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
713 MayaChemTools is free software; you can redistribute it and/or modify it under
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
714 the terms of the GNU Lesser General Public License as published by the Free
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
715 Software Foundation; either version 3 of the License, or (at your option)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
716 any later version.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
717
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
718 =cut