00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00028 #ifndef MCODE_H
00029 #define MCODE_H
00030
00031
00032
00033 #include <algorithm>
00034 #include <iostream>
00035 #include <list>
00036 #include <map>
00037 #include <set>
00038 #include <string>
00039 #include <vector>
00040
00041 #define WITH_GTEST 0
00042 #if WITH_GTEST
00043 #include "gtest/gtest_prod.h"
00044 #endif //WITH_GTEST
00045
00046 #include "graph.h"
00047 using namespace std;
00048
00049 typedef MyNode Node;
00050 typedef MyNode::EdgeIterator EdgeIterator;
00051 typedef MyEdge Edge;
00052 typedef MyGraph Graph;
00053 typedef MyGraph::MyConstNodeIterator ConstNodeIterator;
00054 typedef MyNodeId NodeId;
00055
00056
00057
00058
00059 class MCODE {
00060
00061 #if WITH_GTEST
00062
00063 FRIEND_TEST(MCODETest, TestDensity);
00064 FRIEND_TEST(MCODETest, TestMaxKCore);
00065 FRIEND_TEST(MCODETest, TestWeighNode);
00066 #endif // WITH_GTEST
00067
00068 private:
00069 map<NodeId, double> nodeWeightsMap;
00070 list<NodeId> sortedNodes;
00071 set<NodeId> seenNodesSet;
00072
00078 void maxKCore(const Graph& graph, int &k, Graph &kcore);
00079
00086 void maxKCoreFaster(const Graph &graph, int &k, Graph &kcore);
00087
00097 double weighNode(const Graph&, NodeId nodeId);
00098
00104 void weighNodes(const Graph&);
00105
00114 double computeDensity(const Graph&);
00115
00122 set<NodeId> getNeighbours(const Graph& graph, NodeId nodeId);
00123
00131 void findComplex(const Graph& graph, double vwp, NodeId nodeId,
00132 set<NodeId>& complexNodes, double seedWeight);
00133
00134
00135 public:
00136
00147 double computeGraphScore(const MyGraph &graph);
00148
00178 vector<Graph> findComplexes(const Graph& graph, double vwp,
00179 map< string, double> *nodeWeights = NULL);
00180 };
00181
00182 #endif // MCODE_H
00183
00184