4 #include "mtf/SM/GNNParams.h" 21 inline int cmpQsort(
const void *a,
const void *b){
25 if(a1->dist > b1->dist)
return 1;
26 if(a1->dist == b1->dist)
return 0;
30 template<
class DistType>
35 typedef std::shared_ptr<const DistType> DistTypePtr;
37 GNN(DistTypePtr _dist_func,
int _n_samples,
int _n_dims,
38 bool _is_symmetrical =
true,
const ParamType *gnn_params =
nullptr);
40 void computeDistances(
const double *dataset);
41 void buildGraph(
const double *dataset);
42 void searchGraph(
const double *query,
const double *dataset,
43 int *nn_ids,
double *nn_dists,
int K = 1);
44 void saveGraph(
const char* file_name);
45 void loadGraph(
const char* file_name);
47 void buildGraph(
const double *X,
int k);
48 int searchGraph(
const double *Xq,
const double *X,
53 DistTypePtr dist_func;
54 const int n_samples, n_dims;
55 const bool is_symmetrical;
57 std::vector<Node> nodes;
58 MatrixXd dataset_distances;
63 int getRandNum(
int lb,
int ub){
67 return (rand() % (ub - lb + 1) + lb);
69 template<
typename ScalarT>
70 void swap(ScalarT *i, ScalarT *j){
76 void knnSearch2(
const double *Q,
IndxDist *dists,
const double *X,
77 int rows,
int cols,
int k);
78 void knnSearch11(
const double *Q,
IndxDist *dists,
const double *X,
int rows,
79 int cols,
int k,
int *X_inds);
81 int min(
int a,
int b){
return a < b ? a : b; }
84 int K,
int *gnns_cap);
86 void addNode(
Node *node_i,
int nn);
Definition: GNNParams.h:9
GNN with FLANN support.
Definition: FGNN.h:12