00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef CGRAPHPARTITIONER_H
00029 #define CGRAPHPARTITIONER_H
00030
00031 #include <mrpt/utils/utils_defs.h>
00032 #include <mrpt/utils/CDebugOutputCapable.h>
00033 #include <mrpt/math/CMatrix.h>
00034
00035 namespace mrpt
00036 {
00037 namespace math
00038 {
00046 class MRPTDLLIMPEXP CGraphPartitioner : public mrpt::utils::CDebugOutputCapable
00047 {
00048 public:
00065 static void RecursiveSpectralPartition(
00066 CMatrix &in_A,
00067 std::vector<vector_uint> &out_parts,
00068 float threshold_Ncut = 1.0f,
00069 bool forceSimetry = true,
00070 bool useSpectralBisection = true,
00071 bool recursive = true,
00072 unsigned minSizeClusters = 1);
00073
00087 static void SpectralBisection(
00088 CMatrix &in_A,
00089 vector_uint &out_part1,
00090 vector_uint &out_part2,
00091 float &out_cut_value,
00092 bool forceSimetry = true );
00093
00106 static void exactBisection(
00107 CMatrix &in_A,
00108 vector_uint &out_part1,
00109 vector_uint &out_part2,
00110 float &out_cut_value,
00111 bool forceSimetry = true );
00112
00115 static float nCut(
00116 const CMatrix &in_A,
00117 const vector_uint &in_part1,
00118 const vector_uint &in_part2 );
00119
00120
00123 static bool DEBUG_SAVE_EIGENVECTOR_FILES;
00124
00127 static bool VERBOSE;
00128
00129 private:
00132 static int debug_file_no;
00133
00134 };
00135
00136 }
00137 }
00138 #endif