eg_greedykp.h

Go to the documentation of this file.
00001 #ifndef _GREEDYKP
00002 #define _GREEDYKP
00003 
00004 #include<stdio.h>
00005 #include<stdlib.h>
00006 #include<math.h>
00007 
00008 #include "eg_greedytypes.h"
00009 #include "eg_kppairs.h"
00010 #include "karger.h"
00011 #include "eg_greedysample.h"
00012 
00013 EGdkdomino_t* EGdcutToDKdom(unsigned int max_k, 
00014                             EGdualCut_t *dc, 
00015                             unsigned int orientation, 
00016                             EGmemPool_t *mem);
00017 
00018 EGdkdomino_t *EGddominoToDKdom(EGddomino_t *ddom, 
00019                                int h, 
00020                                int max_nh, 
00021                                EGgreedyData_t *gdata,
00022                                EGmemPool_t *mem,
00023                                unsigned char *const pndummy,
00024                                unsigned char *const pedummy);
00025 
00026 void EGfreeDKdomino(void *v, EGmemPool_t *mem);
00027 
00028 EGgreedyData_t* EGnewGreedyData(EGmemPool_t *mem);
00029 void EGfreeGreedyData(void *vdata);
00030 
00031 int EGfillGreedyData (EGgreedyData_t * data,
00032                       EGdGraph_t * bdG,
00033                       EGlist_t * ddom_list,
00034                       EGlist_t** dembed,
00035                       graphP G,
00036                       int norig_nodes,
00037                       int norig_edges,
00038                       int nplanar_edges,
00039                       int *orig_edges,
00040                       int *planar_edges,
00041                       double *orig_weight,
00042                       double *planar_weight);
00043 
00044 EGdualCut_t* EGnewDualCut(EGmemPool_t *mem, 
00045                           unsigned int sz);
00046 
00047 EGdualCut_t* EGcopyDualCut(EGmemPool_t *mem, 
00048                            EGdualCut_t *dc_in);
00049 
00050 void EGfreeDualCut(void *v, 
00051                    EGmemPool_t *mem);
00052 
00053 EGdcutIter_t* EGnewDcutIter(EGgreedyData_t *gdata);
00054 void EGfreeDcutIter(void *v);
00055 
00056 EGdkpc_t* EGdkdomToDKPC(EGdkdomino_t *dkdom,
00057                         EGmemPool_t *mem);
00058 
00059 EGdkpc_t* EGdcutToDKPC(EGdualCut_t *dc, 
00060                     unsigned int orientation, 
00061                     EGmemPool_t *mem);
00062 
00063 
00064 void EGfreeDKPC(void *v, 
00065                 EGmemPool_t *mem);
00066 
00067 int EGincrementDcutIter(EGdcutIter_t *zit);
00068 EGdualCut_t* EGgetDcut(EGdcutIter_t *zit);
00069 
00070 int EGgetEvenPrec (unsigned int s, 
00071                    unsigned int t, 
00072                    EGgreedyData_t*data);
00073 
00074 int EGgetOddPrec (unsigned int s, 
00075                   unsigned int t, 
00076                   EGgreedyData_t*data);
00077 
00080 EGdijkstraCost_t EGgetEvenDistance (unsigned s, 
00081                                     unsigned t, 
00082                                     EGgreedyData_t*data);
00083 
00084 #if EG_KP_HEURISTIC
00085 EGdijkstraCost_t EGgetOddDistance (unsigned s, 
00086                                    unsigned t, 
00087                                    EGgreedyData_t*data);
00088 #endif
00089 
00090 void EGdisplayDualCut(FILE *fout, EGdualCut_t* dc);
00091 void EGdisplayInternalPair(FILE *fout, EGinternalPairs_t *p);
00092 void EGdisplayDKdomino(FILE *fout, EGdkdomino_t *dkdom);
00093 void EGdisplayDKPC(FILE *fout, EGdkpc_t *dkpc);
00094 
00095 void EGtraceDistance(unsigned int s, 
00096                      unsigned int t, 
00097                      EGgreedyData_t *data);
00098 
00099 int EGextractEEpath(unsigned int s, 
00100                     unsigned int t, 
00101                     EGgreedyData_t *data, 
00102                     EGlist_t *path);
00103 
00104 EGdualCut_t* EGextractHandleCut(EGdkpc_t *dkpc, unsigned int h);
00105 
00106 int EGgrowHandle(EGdkpc_t *dkpc, 
00107                  EGdkdomino_t *link_dkdom,
00108                  EGinternalPairs_t *p, 
00109                  EGgreedyData_t *data,
00110                  EGmemPool_t *mem,
00111                  unsigned char *const pndummy,
00112                  unsigned char *const pedummy);
00113 
00114 int EGremoveHandles(EGdkpc_t *dkpc, EGmemPool_t *mem);
00115 
00116 int EGgrowDKdomino(EGdkdomino_t *dkd, 
00117                    EGinternalPairs_t *p,
00118                    int handle_num,
00119                    EGmemPool_t *mem);
00120 
00121 int EGprimalizeDKPC (EGdkpc_t *dkpc,
00122                      EGgreedyData_t *gdata,
00123                      EGpkpc_t *pkpc,
00124                      unsigned char *const pndummy,
00125                      unsigned char *const pedummy);
00126 
00127 int EGprimalizeDKPCB(EGdkpc_t *dkpc,
00128                      EGgreedyData_t *gdata,
00129                      int *nhandles,
00130                      int **handle_size,
00131                      int ***handles,
00132                      int *nteeth,
00133                      int **teeth_size,
00134                      int ***teeth,
00135                      int **teeth_k,
00136                      int ***teeth_handle,
00137                      int ***teeth_nhalf,
00138                      int ****teeth_halves,
00139                      unsigned char *const pndummy,
00140                      unsigned char *const pedummy);
00141 
00142 int EGnewPKPCset(int nineq,
00143                  int **nhandles,
00144                  int ***handle_size,
00145                  int ****handles,
00146                  int **nteeth,
00147                  int ***teeth_size,
00148                  int ****teeth,
00149                  int ***teeth_k,
00150                  int ****teeth_handle,
00151                  int ****teeth_nhalf,
00152                  int *****teeth_halves);
00153 
00154 void EGfreePKPC(void *v); 
00155 
00156 int EGfreePKPCB(int nhandles,
00157                 int *handle_size,
00158                 int **handles,
00159                 int nteeth,
00160                 int *teeth_size,
00161                 int **teeth,
00162                 int *teeth_k,
00163                 int **teeth_handle,
00164                 int **teeth_nhalf,
00165                 int ***teeth_halves );
00166 
00167 double EGcomputeInterfaceValue(int T_size, 
00168                                int *T_nodes, 
00169                                int A_size,
00170                                int *A_nodes,
00171                                int nnodes, 
00172                                int nedges, 
00173                                int *edges,
00174                                double *weight,
00175                                unsigned char *dummy);
00176 
00177 void EGcomputeDualCutValue(EGdualCut_t *dc);
00178 
00179 double EGcomputePrimalCutValue(EGgreedyData_t*data,
00180                                EGpkpc_t*pkpc,
00181                                int set_size, 
00182                                int *set_nodes, 
00183                                int nnodes, 
00184                                int nedges, 
00185                                int *edges,
00186                                double *weight,
00187                                unsigned char *dummy);
00188 
00189 EGdijkstraCost_t EGcomputeDKPCslack(EGdkpc_t *dkpc);
00190 
00191 double EGcomputePKPCslack( EGgreedyData_t*data,
00192                            EGpkpc_t *pkpc,
00193                            int nnodes,
00194                            int nedges,
00195                            int *edges,
00196                            double *weight);
00197 
00198 int EGkpTo2pTooth( int kp_size,
00199                    int* kp_nodes,
00200                    int kp_k,
00201                    int* kp_handles,
00202                    int* kp_nhalf,
00203                    int** kp_halves,
00204                    int *tp_naset,
00205                    int *tp_nbset,
00206                    int *tp_nmset,
00207                    int **tp_aset,
00208                    int **tp_bset,
00209                    int **tp_mset,
00210                    int nnodes,
00211                    unsigned char *vdummy );
00212 
00213 double EGcomputePKPCBslack(EGgreedyData_t*data,
00214                            EGpkpc_t*pkpc,
00215                            int nhandles,
00216                            int *handle_size,
00217                            int **handles,
00218                            int nteeth,
00219                            int *teeth_size,
00220                            int **teeth,
00221                            int *teeth_k,
00222                            int **teeth_handle,
00223                            int **teeth_nhalf,
00224                            int ***teeth_halves,
00225                            int nnodes,
00226                            int nedges,
00227                            int *edges,
00228                            double *weight);
00229 
00230 int KPseparateFromDualCut( EGdualCut_t *dcut,
00231                            unsigned int orientation,
00232                            EGgreedyData_t *gdata,
00233                            int *nadded,
00234                            double *minslack,
00235                            double sample_time);
00236 
00237 void EGdisplayStatus(FILE *fout, EGgreedyData_t *gdata);
00238 
00239 int EGaddDualCutToHeap(EGheap_t *h, 
00240                        EGdualCut_t *dc, 
00241                        int orientation,
00242                        double lfval,
00243                        EGmemPool_t *mem);
00244 
00245 int KPprocess_cut(int*cutset,int cutsize,double cutweight,void*process_indo,setlist**sets);
00246 
00247 int EGareDualCutsEqual(EGdualCut_t *a, EGdualCut_t *b);
00248 
00249 #endif

Generated on Thu Oct 20 14:58:41 2005 for DominoParitySeparator by  doxygen 1.4.5