SNAP Library 2.1, User Reference
2013-09-25 10:47:25
SNAP, a general purpose, high performance system for analysis and manipulation of large networks
|
#include <triad.h>
Public Member Functions | |
TNetConstraint (const PGraph &GraphPt, const bool &CalcaAll=true) | |
int | Len () const |
double | GetC (const int &ConstraintN) const |
TIntPr | GetNodePr (const int &ConstraintN) const |
double | GetEdgeC (const int &NId1, const int &NId2) const |
double | GetNodeC (const int &NId) const |
void | AddConstraint (const int &NId1, const int &NId2) |
void | CalcConstraints () |
void | CalcConstraints (const int &NId) |
void | Dump () const |
Static Public Member Functions | |
static void | Test () |
Public Attributes | |
PGraph | Graph |
THash< TIntPr, TFlt > | NodePrCH |
TNetConstraint< PGraph >::TNetConstraint | ( | const PGraph & | GraphPt, |
const bool & | CalcaAll = true |
||
) |
Definition at line 471 of file triad.h.
: Graph(GraphPt) { CAssert(! HasGraphFlag(typename PGraph::TObj, gfMultiGraph)); // must not be multigraph if (CalcaAll) { CalcConstraints(); } }
void TNetConstraint< PGraph >::AddConstraint | ( | const int & | NId1, |
const int & | NId2 | ||
) |
Definition at line 507 of file triad.h.
{ if (NId1==NId2 || NodePrCH.IsKey(TIntPr(NId1, NId2))) { return; } typename PGraph::TObj::TNodeI NI1 = Graph->GetNI(NId1); double Constraint = 0.0; if (NI1.IsOutNId(NId2)) { // is direct edge Constraint += 1.0/(double) NI1.GetOutDeg(); } const double SrcC = 1.0/(double) NI1.GetOutDeg(); for (int e = 0; e < NI1.GetOutDeg(); e++) { const int MidNId = NI1.GetOutNId(e); if (MidNId == NId1 || MidNId == NId2) { continue; } const typename PGraph::TObj::TNodeI MidNI = Graph->GetNI(MidNId); if (MidNI.IsOutNId(NId2)) { Constraint += SrcC * (1.0/(double)MidNI.GetOutDeg()); } } if (Constraint==0) { return; } Constraint = TMath::Sqr(Constraint); NodePrCH.AddDat(TIntPr(NId1, NId2), Constraint); }
void TNetConstraint< PGraph >::CalcConstraints | ( | ) |
Definition at line 531 of file triad.h.
{ // add edges for (typename PGraph::TObj::TEdgeI EI = Graph->BegEI(); EI < Graph->EndEI(); EI++) { AddConstraint(EI.GetSrcNId(), EI.GetDstNId()); AddConstraint(EI.GetDstNId(), EI.GetSrcNId()); } // add open triads for (typename PGraph::TObj::TNodeI NI = Graph->BegNI(); NI < Graph->EndNI(); NI++) { for (int i = 0; i < NI.GetDeg(); i++) { const int NId1 = NI.GetNbrNId(i); for (int j = 0; j < NI.GetDeg(); j++) { const int NId2 = NI.GetNbrNId(j); AddConstraint(NId1, NId2); } } } NodePrCH.SortByKey(); }
void TNetConstraint< PGraph >::CalcConstraints | ( | const int & | NId | ) |
Definition at line 552 of file triad.h.
{ typename PGraph::TObj::TNodeI StartNI = Graph->GetNI(NId); TIntSet SeenSet; for (int e = 0; e < StartNI.GetOutDeg(); e++) { typename PGraph::TObj::TNodeI MidNI = Graph->GetNI(StartNI.GetOutNId(e)); AddConstraint(NId, MidNI.GetId()); for (int i = 0; i < MidNI.GetOutDeg(); i++) { const int EndNId = MidNI.GetOutNId(i); if (! SeenSet.IsKey(EndNId)) { AddConstraint(NId, EndNId); SeenSet.AddKey(EndNId); } } } }
void TNetConstraint< PGraph >::Dump | ( | ) | const |
double TNetConstraint< PGraph >::GetC | ( | const int & | ConstraintN | ) | const [inline] |
double TNetConstraint< PGraph >::GetEdgeC | ( | const int & | NId1, |
const int & | NId2 | ||
) | const |
double TNetConstraint< PGraph >::GetNodeC | ( | const int & | NId | ) | const |
Definition at line 487 of file triad.h.
{ typename PGraph::TObj::TNodeI NI1 = Graph->GetNI(NId); if (NI1.GetOutDeg() == 0) { return 0.0; } int KeyId = -1; for (int k = 0; k<NI1.GetOutDeg(); k++) { KeyId = NodePrCH.GetKeyId(TIntPr(NI1.GetId(), NI1.GetOutNId(k))); if (KeyId > -1) { break; } } if (KeyId < 0) { return 0.0; } double Constraint = NodePrCH[KeyId]; for (int i = KeyId-1; i >-1 && NodePrCH.GetKey(i).Val1()==NId; i--) { Constraint += NodePrCH[i]; } for (int i = KeyId+1; i < NodePrCH.Len() && NodePrCH.GetKey(i).Val1()==NId; i++) { Constraint += NodePrCH[i]; } return Constraint; }
TIntPr TNetConstraint< PGraph >::GetNodePr | ( | const int & | ConstraintN | ) | const [inline] |
int TNetConstraint< PGraph >::Len | ( | ) | const [inline] |
void TNetConstraint< PGraph >::Test | ( | ) | [static] |
Definition at line 580 of file triad.h.
{ PUNGraph G = TUNGraph::New(); G->AddNode(0); G->AddNode(1); G->AddNode(2); G->AddNode(3); G->AddNode(4); G->AddNode(5); G->AddNode(6); G->AddEdge(0,1); G->AddEdge(0,2); G->AddEdge(0,3); G->AddEdge(0,4); G->AddEdge(0,5); G->AddEdge(0,6); G->AddEdge(1,2); G->AddEdge(1,5); G->AddEdge(1,6); G->AddEdge(2,4); TNetConstraint<PUNGraph> NetConstraint(G, true); // NetConstraint.CalcConstraints(0); NetConstraint.Dump(); printf("middle node network constraint: %f\n", NetConstraint.GetNodeC(0)); }
PGraph TNetConstraint< PGraph >::Graph |
THash<TIntPr, TFlt> TNetConstraint< PGraph >::NodePrCH |