8 const int nId = it.GetKey();
27 if (B.
IsKey(it.GetKey())) n++;
30 if (A.
IsKey(it.GetKey())) n++;
46 int nId = it.GetKey();
48 if (maxDeg < deg) { maxDeg=deg;
id=nId; }
55 int maxIntersection = -1;
58 int nId = it.GetKey();
62 int curIntersection = 0;
63 for (
int i=0; i<deg; i++) {
65 if (CAND.
IsKey(nbrId)) curIntersection++;
68 if (maxIntersection < curIntersection) { maxIntersection=curIntersection;
id=nId; }
75 if (CAND.
Len()==0)
return;
84 while(EXT.
Len() != 0) {
119 TInt nId = NI.GetId();
130 int n = MaxCliques.
Len();
133 for (
int i=0; i<n; i++) {
134 const int len = MaxCliques[i].
Len();
136 if (len < MinNodeOverlap) {
continue; }
138 for (
int j=0; j<len; j++) { set.
AddKey(MaxCliques[i][j]); }
143 for (
int i=0; i<n; i++) OverlapMtx[i].Gen(n);
145 for (
int i=0; i<n; i++) {
146 OverlapMtx[i][i] = cliques[i].
Len();
147 for (
int j=i+1; j<n; j++) {
148 OverlapMtx[i][j] =
Intersection(cliques[i], cliques[j]); }
153 const int n = MaxCliques.
Len();
156 for (
int i=0; i<n; i++) {
157 const int len = MaxCliques[i].
Len();
159 if (len < MinNodeOverlap) {
continue; }
161 for (
int j=0; j<len; j++) { set.
AddKey(MaxCliques[i][j]); }
165 for (
int i=0; i < n; i++) {
168 for (
int i=0; i<n; i++) {
169 for (
int j=i+1; j<n; j++) {
170 if (
Intersection(cliques[i], cliques[j]) >= MinNodeOverlap) {
178 int n = OverlapMtx.
Len();
179 for (
int i=0; i<n; i++) {
180 bool isCommunity =
false;
181 for (
int j=i+1; j<n; j++) {
182 if (OverlapMtx[i][j] >= MinNodeOverlap) {
195 int n = OverlapMtx.
Len();
196 for(
int i=0; i<n; i++){
197 bool isCommunity =
false;
198 int size1 = MaxCliques[i].
Len();
199 for(
int j=i+1; j<n; j++){
200 int size2 = MaxCliques[j].
Len();
201 double ratio = OverlapMtx[i][j];
202 if(size1 < size2) ratio /= size1;
204 if(ratio >= MinOverlapFrac){
219 MaxCliques.
Clr(
false);
225 printf(
"Clique Percolation Method\n");
238 NIdCmtyVV.
Clr(
false);
240 for (
int c = 0; c < CnComV.Len(); c++) {
242 for (
int i = 0; i <CnComV[c].Len(); i++) {
243 const TIntV& CliqueNIdV = MaxCliques[CnComV[c][i]];
250 printf(
"done [%s].\n", ExeTm.
GetStr());
void Clr(const bool &DoDel=true, const int &NoDelLim=-1)
static void GetRelativeComplement(const THashSet< TInt > &A, const THashSet< TInt > &B, THashSet< TInt > &Complement)
void GetNbrs(int NId, THashSet< TInt > &Nbrs) const
void AddKeyV(const TVec< TKey > &KeyV)
static void GetCPMCommunities(const PUNGraph &G, int MinMaxCliqueSize, TVec< TIntV > &Communities)
Clique Percolation method communities.
int AddNode(int NId=-1)
Adds a node of ID NId to the graph.
int GetEdges() const
Returns the number of edges in the graph.
TSizeTy Len() const
Returns the number of elements in the vector.
Node iterator. Only forward iteration (operator++) is supported.
void GetKeyV(TVec< TKey > &KeyV) const
void Gen(const int &ExpectVals)
static void GetMaxCliques(const PUNGraph &G, int MinMaxCliqueSize, TVec< TIntV > &MaxCliques)
Enumerate maximal cliques of the network on more than MinMaxCliqueSize nodes.
bool IsKey(const TKey &Key) const
int GetNodes() const
Returns the number of nodes in the graph.
int GetDeg() const
Returns degree of the current node.
void Clr(const bool &DoDel=true, const TSizeTy &NoDelLim=-1)
Clears the contents of the vector.
static void GetOverlapCliques(const TVec< TIntV > &OverlapMtx, int MinNodeOverlap, TVec< TIntV > &CliqueIdVV)
void Sort(const bool &Asc=true)
Sorts the elements of the vector.
void DelKey(const TKey &Key)
int MaxNbrsInCANDNodeId(const THashSet< TInt > &SUBG, const THashSet< TInt > &CAND) const
static void GetIntersection(const THashSet< TInt > &A, const THashSet< TInt > &B, THashSet< TInt > &C)
TNodeI GetNI(const int &NId) const
Returns an iterator referring to the node of ID NId in the graph.
static PUNGraph New()
Static constructor that returns a pointer to the graph. Call: PUNGraph Graph = TUNGraph::New().
int AddKey(const TKey &Key)
const TVal & Last() const
Returns a reference to the last element of the vector.
void Expand(const THashSet< TInt > &SUBG, THashSet< TInt > &CAND)
int AddEdge(const int &SrcNId, const int &DstNId)
Adds an edge between node IDs SrcNId and DstNId to the graph.
TVec< TIntV > * m_maxCliques
void Pack()
Reduces vector capacity (frees memory) to match its size.
TNodeI EndNI() const
Returns an iterator referring to the past-the-end node in the graph.
int GetNbrNId(const int &NodeN) const
Returns ID of NodeN-th neighboring node.
void Gen(const TSizeTy &_Vals)
Constructs a vector (an array) of _Vals elements.
const char * GetStr() const
TSizeTy Add()
Adds a new element at the end of the vector, after its current last element.
TNodeI BegNI() const
Returns an iterator referring to the first node in the graph.
void DelLast()
Removes the last element of the vector.
static int Intersection(const THashSet< TInt > &A, const THashSet< TInt > &B)
static void CalculateOverlapMtx(const TVec< TIntV > &MaxCliques, int MinNodeOverlap, TVec< TIntV > &OverlapMtx)
void GetWccs(const PGraph &Graph, TCnComV &CnComV)
Returns all weakly connected components in a Graph.
void GetMaximalCliques(const PUNGraph &G, int MinMaxCliqueSize, TVec< TIntV > &MaxCliques)
int GetNodeIdWithMaxDeg(const THashSet< TInt > &Set) const