00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef __RD_BITOPS_H__
00011 #define __RD_BITOPS_H__
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "BitVects.h"
00024 #include <string>
00025
00026
00027
00028
00029 template <typename T>
00030 double SimilarityWrapper(const T &bv1,const T &bv2,
00031 double (*metric)(const T &,const T &),
00032 bool returnDistance=false){
00033 double res=0.0;
00034 if(bv1.getNumBits()>bv2.getNumBits()){
00035 T *bv1tmp = FoldFingerprint(bv1,bv1.getNumBits()/bv2.getNumBits());
00036 res = metric(*bv1tmp,bv2);
00037 delete bv1tmp;
00038 } else if(bv2.getNumBits()>bv1.getNumBits()){
00039 T *bv2tmp = FoldFingerprint(bv2,bv2.getNumBits()/bv1.getNumBits());
00040 res = metric(bv1,*bv2tmp);
00041 delete bv2tmp;
00042 } else {
00043 res = metric(bv1,bv2);
00044 }
00045 if(returnDistance) res = 1.0-res;
00046 return res;
00047 }
00048
00049 template <typename T>
00050 double SimilarityWrapper(const T &bv1,const T &bv2,double a,double b,
00051 double (*metric)(const T &,const T &,double,double),
00052 bool returnDistance=false){
00053 double res=0.0;
00054 if(bv1.getNumBits()>bv2.getNumBits()){
00055 T *bv1tmp = FoldFingerprint(bv1,bv1.getNumBits()/bv2.getNumBits());
00056 res = metric(*bv1tmp,bv2,a,b);
00057 delete bv1tmp;
00058 } else if(bv2.getNumBits()>bv1.getNumBits()){
00059 T *bv2tmp = FoldFingerprint(bv2,bv2.getNumBits()/bv1.getNumBits());
00060 res = metric(bv1,*bv2tmp,a,b);
00061 delete bv2tmp;
00062 } else {
00063 res = metric(bv1,bv2,a,b);
00064 }
00065 if(returnDistance) res = 1.0-res;
00066 return res;
00067 }
00068
00069
00070 bool AllProbeBitsMatch(const char *probe,const char *ref);
00071 bool AllProbeBitsMatch(const std::string &probe,const std::string &ref);
00072
00073
00074 template <typename T1>
00075 bool AllProbeBitsMatch(const T1 &probe,const std::string &pkl);
00076
00077 template <typename T1>
00078 bool AllProbeBitsMatch(const T1 &probe,const T1 &ref);
00079
00080
00081
00082
00083
00084
00085 template <typename T1, typename T2>
00086 int
00087 NumOnBitsInCommon(const T1& bv1,const T2& bv2);
00088
00089 int
00090 NumOnBitsInCommon(const ExplicitBitVect & bv1,const ExplicitBitVect & bv2);
00091
00092
00093
00094
00095
00096 template <typename T1, typename T2>
00097 double
00098 TanimotoSimilarity(const T1& bv1,const T2& bv2);
00099
00100
00101
00102
00103
00104 template <typename T1, typename T2>
00105 double
00106 CosineSimilarity(const T1& bv1,
00107 const T2& bv2);
00108
00109
00110
00111
00112
00113 template <typename T1, typename T2>
00114 double
00115 KulczynskiSimilarity(const T1& bv1,
00116 const T2& bv2);
00117
00118
00119
00120
00121
00122 template <typename T1, typename T2>
00123 double
00124 DiceSimilarity(const T1& bv1,
00125 const T2& bv2);
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137 template <typename T1, typename T2>
00138 double
00139 TverskySimilarity(const T1& bv1,
00140 const T2& bv2,double a,double b);
00141
00142
00143
00144
00145
00146 template <typename T1, typename T2>
00147 double
00148 SokalSimilarity(const T1& bv1,
00149 const T2& bv2);
00150
00151
00152
00153
00154
00155 template <typename T1, typename T2>
00156 double
00157 McConnaugheySimilarity(const T1& bv1,
00158 const T2& bv2);
00159
00160
00161
00162
00163
00164 template <typename T1, typename T2>
00165 double
00166 AsymmetricSimilarity(const T1& bv1,
00167 const T2& bv2);
00168
00169
00170
00171
00172
00173 template <typename T1, typename T2>
00174 double
00175 BraunBlanquetSimilarity(const T1& bv1,
00176 const T2& bv2);
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186 template <typename T1, typename T2>
00187 double
00188 RusselSimilarity(const T1& bv1,
00189 const T2& bv2);
00190
00191
00192
00193
00194
00195
00196 template <typename T1, typename T2>
00197 double
00198 OnBitSimilarity(const T1& bv1,const T2& bv2);
00199
00200
00201
00202
00203
00204 template <typename T1, typename T2>
00205 int
00206 NumBitsInCommon(const T1& bv1,const T2& bv2);
00207
00208
00209
00210
00211
00212 template <typename T1, typename T2>
00213 double
00214 AllBitSimilarity(const T1& bv1,const T2& bv2);
00215
00216
00217 template <typename T1, typename T2>
00218 IntVect
00219 OnBitsInCommon(const T1& bv1,const T2& bv2);
00220
00221
00222 template <typename T1, typename T2>
00223 IntVect
00224 OffBitsInCommon(const T1& bv1,const T2& bv2);
00225
00226
00227
00228
00229
00230
00231
00232 template <typename T1, typename T2>
00233 DoubleVect
00234 OnBitProjSimilarity(const T1& bv1,const T2& bv2);
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245 template <typename T1, typename T2>
00246 DoubleVect
00247 OffBitProjSimilarity(const T1& bv1,const T2& bv2);
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260 template <typename T1>
00261 T1 *
00262 FoldFingerprint(const T1& bv1,unsigned int factor=2);
00263
00264
00265
00266
00267
00268
00269
00270
00271 template <typename T1>
00272 std::string
00273 BitVectToText(const T1& bv1);
00274
00275
00276
00277
00278
00279
00280
00281
00282 template <typename T1>
00283 std::string
00284 BitVectToFPSText(const T1& bv1);
00285
00286
00287
00288
00289
00290
00291
00292
00293 template <typename T1>
00294 void
00295 UpdateBitVectFromFPSText(T1& bv1,const std::string &fps);
00296
00297
00298
00299 #endif