Visualisierung2
FastCommunity.h
Go to the documentation of this file.
1 // Based on the implementation of http://www.cs.unm.edu/~aaron/research/fastmodularity.htm
2 // by Aaron Clauset
3 
4 
5 #pragma once
6 
7 #include <iostream>
8 #include <fstream>
9 #include <string>
10 #include "stdlib.h"
11 #include "time.h"
12 #include "math.h"
13 #include <vector>
14 
15 #include "myMaxheap.h"
16 #include "myVector.h"
17 #include "myEdge.h"
18 #include "myList.h"
19 #include "myStub.h"
20 
21 // ------------------------------------------------------------------------------------
22 // tuple object - defined by an real value and (row,col) indices
23 #if !defined(TUP_INCLUDED)
24 #define TUP_INCLUDED
25 struct mytuple {
26  double m; // stored value
27  int i; // row index
28  int j; // column index
29  int k; // heap index
30 };
31 #endif
32 
33 // Nodenub object - defined by a *node pointer and *node pointer
36 struct nodenub {
39 };
40 
41 // ------------------------------------------------------------------------------------
42 // ordered pair structures (handy in the program)
46 struct apair
47 {
48  int x;
49  int y;
50 };
51 // ------------------------------------------------------------------------------------
52 
53 #if !defined(netparam_INCLUDED)
54 #define netparam_INCLUDED
55 
57 struct netparameters {
58  int n;
59  int m;
60  int maxid;
61  int minid;
62 };
63 #endif
64 
65 #if !defined(stats_INCLUDED)
66 #define stats_INCLUDED
67 
69 struct groupstats {
70  int numgroups;
71  double meansize;
72  int maxsize;
73  int minsize;
74  double *sizehist;
75 };
76 #endif
77 
78 
88 {
89 public:
90  FastCommunity(void);
91  ~FastCommunity(void);
94  std::vector<unsigned int> edgeList;
95 
96  myList* clusterAndOrder(std::string path);
97 
98 private:
99  char pauseme;
104  double *Q;
106  double *a;
109  enum {NONE};
110 
111  void readInputFile(std::string path);
112  void buildDeltaQMatrix();
113  void groupListsSetup();
114  void mergeCommunities(int i, int j);
115  void groupListsUpdate(const int x, const int y);
116  void groupListsStats();
117  void recordNetwork();
118  int getClusterIndex();
119 };
myEdge * elist
Kantenliste der Adjazenzmatrix um Laufzeit bei den Berechnungen zu sparen.
int numgroups
Clusteranzahl.
Definition: FastCommunity.h:70
void buildDeltaQMatrix()
Erzeugt die Matrix fuer die Moadalitaeten.
netparameters gparm
Struktur mit verschiedenen Informationen ueber den Graphen gefuellt wird.
Definition: FastCommunity.h:92
void readInputFile(std::string path)
Liest den Graphen aud der angegeben Datei.
apair * joins
Enthaellt die Liste von durchgefuerten Vereinigungen.
int maxid
Groesste KnotenId.
Definition: FastCommunity.h:60
mytuple * heap_ptr
Adresse des Knoten im MaxHeap.
Definition: FastCommunity.h:37
int getClusterIndex()
Im Projekt wird, dadurch, dass eine Tiefensuche verwirklicht werden soll, alle Cluster verschmolzen b...
void groupListsUpdate(const int x, const int y)
Updatet die Clusterliste, indem die Clusterliste von x in die Clusterliste von y eingegliedert wird...
int k
Index des Elements im Heap.
Definition: myElement.h:11
int m
Kantenanzahl im Graphen.
Definition: FastCommunity.h:59
char pauseme
Variable die benutz wird, damit sich das Fenster Im fehlerfall nicht schliesst.
Definition: FastCommunity.h:99
nodenub * dq
Matrix fuer die Modalitaeten zwischen den Clustern.
myVector * v
Zum Knoten gehoeriger Vektorbaum.
Definition: FastCommunity.h:38
Definition: myList.h:4
myMaxheap * h
Heap zum speichern der maximalen Modalitaeten zwischen den Clustern (max_i{dQ_ij}) ...
Definition: myEdge.h:4
void recordNetwork()
Gibt die Eigenschaften des Graphen aus.
int n
Knotenanzahl im Graphen.
Definition: FastCommunity.h:58
void mergeCommunities(int i, int j)
Verschmilzt zwei Cluster mit Index i und j zu einem.
void groupListsStats()
Bestimmt die Eigenschaften der Cluster.
groupstats gstats
Struktur mit informationen der Cluster.
Definition: FastCommunity.h:93
int maxsize
Anzahl der Knoten des groessten Clusters.
Definition: FastCommunity.h:72
void groupListsSetup()
Erzeugt und initialisiert eine Clasterliste.
int minsize
Anzahl der Knoten des kleinsten Clusters.
Definition: FastCommunity.h:73
int minid
Kleinste KnotenId.
Definition: FastCommunity.h:61
myDpair Qmax
Maximale Modalitaet zum Zeitpunkt.
double * Q
Ablage fuer die Modalitaeten zum Zeitpunkt t.
Definition: myDpair.h:4
int y
Der Knoten welchen x hinzugefuegt wird.
Definition: FastCommunity.h:49
std::vector< unsigned int > edgeList
eine Liste aller Kanten die im Graphen vorkommen
Definition: FastCommunity.h:94
int i
Zeilenindex des Elements.
Definition: myElement.h:9
myList * clusterAndOrder(std::string path)
Die Hauptmethode dieser Klasse. Sie liest den Graphen aus der Datei, clustert ihn, fuehrt die Tiefensuche durch und gibt die Reihenfolge der Knoten als Liste zurueck.
double m
Abgelegter Wert/Parameter.
Definition: myElement.h:8
double * sizehist
Groessenhistorie der Cluster.
Definition: FastCommunity.h:74
myEdge * e
Anfangs Adjazenzmatrix. Spaerlich besetzt da viele Knoten keine Kanten zueinander haben...
double * a
Zwischenspeicher fuer Werte aus der Adjazenzmatrix.
int j
Spaltenindex des Elements.
Definition: myElement.h:10
int x
Der hinzufuegende Knoten.
Definition: FastCommunity.h:48
double meansize
Mittlere Groesse der Cluster.
Definition: FastCommunity.h:71
Definition: myStub.h:6
myStub * c
Enthaellt die Liste von Clustern.