ColPack
BipartiteGraphBicoloring/BipartiteGraphBicoloring.h
Go to the documentation of this file.
00001 /************************************************************************************
00002     Copyright (C) 2005-2008 Assefaw H. Gebremedhin, Arijit Tarafdar, Duc Nguyen,
00003     Alex Pothen
00004 
00005     This file is part of ColPack.
00006 
00007     ColPack is free software: you can redistribute it and/or modify
00008     it under the terms of the GNU Lesser General Public License as published
00009     by the Free Software Foundation, either version 3 of the License, or
00010     (at your option) any later version.
00011 
00012     ColPack is distributed in the hope that it will be useful,
00013     but WITHOUT ANY WARRANTY; without even the implied warranty of
00014     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00015     GNU Lesser General Public License for more details.
00016 
00017     You should have received a copy of the GNU Lesser General Public License
00018     along with ColPack.  If not, see <http://www.gnu.org/licenses/>.
00019 ************************************************************************************/
00020 
00021 using namespace std;
00022 
00023 #ifndef BIPARTITEGRAPHBICOLORING_H
00024 #define BIPARTITEGRAPHBICOLORING_H
00025 
00026 namespace ColPack
00027 {
00046         class BipartiteGraphBicoloring : public BipartiteGraphOrdering
00047         {
00048         public: //DOCUMENTED
00049 
00050                 //Public Function 3573
00052                 void GetLeftVertexColors(vector<int> &output);
00053 
00054                 //Public Function 3574
00056                 void GetRightVertexColors(vector<int> &output);
00057 
00059                 void GetRightVertexColors_Transformed(vector<int> &output);
00060 
00062 
00075                 double** GetLeftSeedMatrix(int* ip1_SeedRowCount, int* ip1_SeedColumnCount);
00076 
00078 
00081                 double** GetLeftSeedMatrix_unmanaged(int* ip1_SeedRowCount, int* ip1_SeedColumnCount);
00082 
00084 
00097                 double** GetRightSeedMatrix(int* ip1_SeedRowCount, int* ip1_SeedColumnCount);
00098 
00100 
00103                 double** GetRightSeedMatrix_unmanaged(int* ip1_SeedRowCount, int* ip1_SeedColumnCount);
00104 
00106 
00109                 void GetSeedMatrix(double*** dp3_LeftSeed, int* ip1_LeftSeedRowCount, int* ip1_LeftSeedColumnCount, double*** dp3_RightSeed, int* ip1_RightSeedRowCount, int* ip1_RightSeedColumnCount);
00110 
00112 
00115                 void GetSeedMatrix_unmanaged(double*** dp3_LeftSeed, int* ip1_LeftSeedRowCount, int* ip1_LeftSeedColumnCount, double*** dp3_RightSeed, int* ip1_RightSeedRowCount, int* ip1_RightSeedColumnCount);
00116 
00117         protected: //DOCUMENTED
00119 
00123                 int i_LeftVertexDefaultColor;
00124 
00126 
00130                 int i_RightVertexDefaultColor;
00131 
00133 
00136                 int m_i_LeftVertexColorCount;
00137 
00139 
00142                 int m_i_RightVertexColorCount;
00143 
00144                 int m_i_VertexColorCount;
00145 
00147 
00149                 vector<int> m_vi_LeftVertexColors;
00150 
00152 
00154                 vector<int> m_vi_RightVertexColors;
00155 
00156                 bool lseed_available;
00157                 int i_lseed_rowCount;
00158                 double** dp2_lSeed;
00159 
00160                 bool rseed_available;
00161                 int i_rseed_rowCount;
00162                 double** dp2_rSeed;
00163 
00164                 void Seed_init();
00165                 void Seed_reset();
00166 
00167         private:
00168 
00169                 //Private Function 3501
00170                 void PresetCoveredVertexColors();
00171 
00172                 //Private Function 3506
00173                 int CheckVertexColoring(string s_VertexColoringVariant);
00174 
00175                 //Private Function 3507
00176                 int CalculateVertexColorClasses();
00177 
00178                 //Private Function 3508
00179                 int FixMinimalCoverStarBicoloring();
00180 
00181         protected:
00182 
00183                 int m_i_ViolationCount;
00184 
00185                 //int m_i_ColoringUnits; // used in ImplicitCoveringAcyclicBicoloring()
00186 
00187                 int m_i_LargestLeftVertexColorClass;
00188                 int m_i_LargestRightVertexColorClass;
00189 
00190                 int m_i_LargestLeftVertexColorClassSize;
00191                 int m_i_LargestRightVertexColorClassSize;
00192 
00193                 int m_i_SmallestLeftVertexColorClass;
00194                 int m_i_SmallestRightVertexColorClass;
00195 
00196                 int m_i_SmallestLeftVertexColorClassSize;
00197                 int m_i_SmallestRightVertexColorClassSize;
00198 
00199                 int m_i_LargestVertexColorClass;
00200                 int m_i_SmallestVertexColorClass;
00201 
00202                 int m_i_LargestVertexColorClassSize;
00203                 int m_i_SmallestVertexColorClassSize;
00204 
00205                 double m_d_AverageLeftVertexColorClassSize;
00206                 double m_d_AverageRightVertexColorClassSize;
00207                 double m_d_AverageVertexColorClassSize;
00208 
00209                 double m_d_ColoringTime;
00210                 double m_d_CheckingTime;
00211 
00212                 string m_s_VertexColoringVariant;
00213 
00214                 vector<int> m_vi_LeftVertexColorFrequency;
00215                 vector<int> m_vi_RightVertexColorFrequency;
00216 
00217         public:
00218 
00219                 //Public Constructor 3551
00220                 BipartiteGraphBicoloring();
00221 
00222                 //Public Destructor 3552
00223                 ~BipartiteGraphBicoloring();
00224 
00225                 //Virtual Function 3553
00226                 virtual void Clear();
00227 
00228                 //Virtual Function 3554
00229                 virtual void Reset();
00230 
00231                 //Public Function 3562
00232                 int ImplicitCoveringStarBicoloring();
00233 
00234                 //Public Function 3560
00235                 int ExplicitCoveringStarBicoloring();
00236 
00237                 //Public Function 3559
00238                 int ExplicitCoveringModifiedStarBicoloring();
00239 
00240                 //Public Function 3564
00241                 int ImplicitCoveringGreedyStarBicoloring();
00242 
00243                 //Public Function 3556
00244                 int MinimalCoveringRowMajorStarBicoloring();            //????
00245 
00246                 //Public Function 3557
00247                 int MinimalCoveringColumnMajorStarBicoloring();         //????
00248 
00249                 //Public Function 3558
00250                 int ImplicitCoveringConservativeStarBicoloring();       // CRASH
00251 
00252                 //Public Function 3561
00253                 int MinimalCoveringStarBicoloring();                            // CRASH
00254 
00255                 //Public Function 3563
00256                 int ImplicitCoveringRestrictedStarBicoloring();         // CRASH
00257 
00258                 //Public Function 3565
00259                 int CheckStarBicoloring();
00260 
00261 
00262                 //Public Function 3568
00263                 int GetLeftVertexColorCount();
00264 
00265                 //Public Function 3569
00266                 int GetRightVertexColorCount();
00267 
00268                 //Public Function 3570
00269                 int GetVertexColorCount();
00270 
00271                 //Public Function 3571
00272                 int GetViolationCount();
00273 
00274                 int GetRightVertexDefaultColor();
00275 
00276                 //Public Function 3572
00277                 string GetVertexBicoloringVariant();
00278                 string GetVertexColoringVariant();
00279 
00280                 //Public Function 3575
00281                 void PrintVertexBicolors();
00282 
00283                 //Public Function 3576
00284                 void PrintVertexBicoloringMetrics();
00285 
00286                 //Public Function 3577
00287                 void PrintVertexBicolorClasses();
00288                 
00289                 double GetVertexColoringTime();
00290         };
00291 }
00292 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines