| 
    SNAP Library 2.0, Developer Reference
    2013-05-13 16:33:57
    
   SNAP, a general purpose, high performance system for analysis and manipulation of large networks 
   | 
  
  
  
 
Union Find class (Disjoint-set data structure). More...
#include <gbase.h>

Public Member Functions | |
| TInt & | Parent (const int &Key) | 
| Returns the parent of element Key.   | |
| TInt & | Rank (const int &Key) | 
| Returns the rank of element Key.   | |
| TUnionFind () | |
| TUnionFind (const int &ExpectKeys) | |
| Constructor that reserves enough memory for ExpectKeys elements.   | |
| TUnionFind (const TUnionFind &UnionFind) | |
| TUnionFind & | operator= (const TUnionFind &UF) | 
| int | Len () const | 
| Returns the number of elements in the structure.   | |
| bool | IsKey (const int &Key) const | 
| Returns true if the structure contains element Key.   | |
| int | GetKeyI (const int &KeyN) const | 
| Returns the element KeyN.   | |
| int | Find (const int &Key) | 
| Returns the set that contains element Key.   | |
| int | Add (const int &Key) | 
| Adds an element Key to the structure.   | |
| void | Union (const int &Key1, const int &Key2) | 
| Merges sets with elements Key1 and Key2.   | |
| bool | IsSameSet (const int &Key1, const int &Key2) | 
| Returns true if elements Key1 and Key2 are in the same set.   | |
| void | Dump () | 
| Prints out the structure to standard output.   | |
Private Attributes | |
| THash< TInt, TIntPr > | KIdSetH | 
Union Find class (Disjoint-set data structure).
For more info see: http://en.wikipedia.org/wiki/Disjoint-set_data_structure).
| TUnionFind::TUnionFind | ( | ) |  [inline] | 
        
| TUnionFind::TUnionFind | ( | const int & | ExpectKeys | ) |  [inline] | 
        
| TUnionFind::TUnionFind | ( | const TUnionFind & | UnionFind | ) |  [inline] | 
        
| int TUnionFind::Add | ( | const int & | Key | ) |  [inline] | 
        
Adds an element Key to the structure.
Definition at line 213 of file gbase.h.
References THash< TKey, TDat, THashFunc >::AddDat(), and KIdSetH.
Referenced by TSnap::TSnapDetail::TCNMQMatrix::Init().


| void TUnionFind::Dump | ( | ) | 
Prints out the structure to standard output.
Definition at line 53 of file gbase.cpp.
References Find(), THash< TKey, TDat, THashFunc >::GetKey(), KIdSetH, and THash< TKey, TDat, THashFunc >::Len().
                      {
  printf("  key\tset\n");
  for (int i = 0; i < KIdSetH.Len(); i++) {
    printf("  %d\t%d\n", int(KIdSetH.GetKey(i)), Find(KIdSetH.GetKey(i)));
  }
  printf("\n");
}

| int TUnionFind::Find | ( | const int & | Key | ) | 
Returns the set that contains element Key.
Definition at line 23 of file gbase.cpp.
References Parent().
Referenced by TSnap::TSnapDetail::TCNMQMatrix::CmtyCMN(), Dump(), IsSameSet(), and Union().
                                   {
  int SetId = Key, parent = Parent(Key);
  // find set id
  while (parent != -1) {
    SetId = parent;
    parent = Parent(parent);
  }
  // flatten
  parent = Key;
  while (parent != -1) {
    const int tmp = Parent(parent);
    if (tmp != -1) { Parent(parent) = SetId; }
    parent = tmp;
  }
  return SetId;
}


| int TUnionFind::GetKeyI | ( | const int & | KeyN | ) |  const [inline] | 
        
| bool TUnionFind::IsKey | ( | const int & | Key | ) |  const [inline] | 
        
| bool TUnionFind::IsSameSet | ( | const int & | Key1, | 
| const int & | Key2 | ||
| ) |  [inline] | 
        
| int TUnionFind::Len | ( | ) |  const [inline] | 
        
| TUnionFind& TUnionFind::operator= | ( | const TUnionFind & | UF | ) |  [inline] | 
        
| TInt& TUnionFind::Parent | ( | const int & | Key | ) |  [inline] | 
        
Returns the parent of element Key.
Definition at line 194 of file gbase.h.
References THash< TKey, TDat, THashFunc >::GetDat(), KIdSetH, and TPair< TVal1, TVal2 >::Val1.
Referenced by Find(), and Union().


| TInt& TUnionFind::Rank | ( | const int & | Key | ) |  [inline] | 
        
Returns the rank of element Key.
Definition at line 196 of file gbase.h.
References THash< TKey, TDat, THashFunc >::GetDat(), KIdSetH, and TPair< TVal1, TVal2 >::Val2.
Referenced by Union().


| void TUnionFind::Union | ( | const int & | Key1, | 
| const int & | Key2 | ||
| ) | 
Merges sets with elements Key1 and Key2.
Definition at line 40 of file gbase.cpp.
References Find(), Parent(), and Rank().
Referenced by TSnap::TSnapDetail::TCNMQMatrix::MergeBestQ().
                                                       {
  const int root1 = Find(Key1);
  const int root2 = Find(Key2);
  TInt& rank1 = Rank(root1);
  TInt& rank2 = Rank(root2);
  if (rank1 > rank2) { Parent(root2) = root1; }
  else if (rank1 < rank2) { Parent(root1) = root2; }
  else if (root1 != root2) {
    Parent(root2) = root1;
    Rank(root1)++;
  }
}


THash<TInt, TIntPr> TUnionFind::KIdSetH [private] |