CPPDescent 80d9539 (with uncommitted changes)
A C++ KNN-Graph creation library
Loading...
Searching...
No Matches
cppdescent.hpp
1
5#include "ADTGraph.hpp"
6#include "ADTVector.hpp"
7
8typedef float (*DistanceFunc)(Pointer a, Pointer b);
9extern bool verbose;
10
15namespace cppdescent {
16int compareGraphVertices(Pointer vertex1, Pointer vertex2);
17
18int compareGraphVertexPairs(Pointer p1, Pointer p2);
19
20// ================================ I/O ======================================
35Vector* readBinData(const char* fp, int dimensions);
36
53void writeBinGraph(const char* fp, Graph* graph, int K);
54
63Graph* readBinGraph(const char* fp, int dimensions);
64
65// ============================ Helper Functions =============================
76float recall(Graph* bfGraph, Graph* nnGraph, int N, int K);
77
78// ============================ Metric Functions =============================
87float euclideanDistance(Pointer a, Pointer b);
96float manhattanDistance(Pointer a, Pointer b);
104int compareEdgesEuclidean(Pointer first, Pointer second);
105
106int compareVertexPairsEuclidean(Pointer first, Pointer second);
114int compareEdgesManhattan(Pointer first, Pointer second);
115
116// ============================= KNN computation =============================
130Graph* KNNBruteForceGraph(Vector* data, int K, CompareFunc compare);
150 int K,
151 int D,
152 int Trees,
153 float delta,
154 float rho,
155 DistanceFunc distance);
170 int K,
171 CompareFunc compare,
172 Vector* query);
173
174// ========================= Random Projection Trees =========================
175
191void RPTree(Graph* graph, Vector* vec, int K, int D, int dimensions);
192
193}; // namespace cppdescent
Abstract undirected graph with weighted edges.
ADTVector implementation using a dynamic array.
Definition ADTGraph.hpp:17
ADT Priority Queue.
Definition ADTPQueue.hpp:19
ADT Vector.
Definition ADTVector.hpp:58
Functions for the creation of a K-NN graph.
Definition cppdescent.hpp:15
float euclideanDistance(Pointer a, Pointer b)
Returns the Euclidean distance between two points of arbitrary dimension.
Definition cppdescent.cpp:623
Graph * readBinGraph(const char *fp, int dimensions)
Reads a graph from a binary file. To work correctly, the file needs to be first created from the 'wri...
Definition cppdescent.cpp:127
Graph * KNNBruteForceGraph(Vector *data, int K, CompareFunc compare)
Computes the K-NN graph using brute force.
Definition cppdescent.cpp:193
PQueue * NNDescent_Query(Graph *graph, int K, CompareFunc compare, Vector *query)
Computes the K Nearest Neighbors of the query point in the graph.
void writeBinGraph(const char *fp, Graph *graph, int K)
Writes a computed graph to a binary file.
Definition cppdescent.cpp:85
int compareEdgesEuclidean(Pointer first, Pointer second)
Compare edges using the euclideanDistance function.
Definition cppdescent.cpp:640
int compareEdgesManhattan(Pointer first, Pointer second)
Compare edges using the manhattanDistance function.
Graph * NNDescent_KNNGraph(Vector *data, int K, int D, int Trees, float delta, float rho, DistanceFunc distance)
Computes the K-NN graph for the given dataset using the NN-Descent algorithm.
Definition cppdescent.cpp:458
float manhattanDistance(Pointer a, Pointer b)
Returns the Manhattan distance between two points of arbitrary dimension.
void RPTree(Graph *graph, Vector *vec, int K, int D, int dimensions)
Creates a graph using random projection trees.
Definition cppdescent.cpp:660
Vector * readBinData(const char *fp, int dimensions)
Reads the data from a binary file.
Definition cppdescent.cpp:58
float recall(Graph *bfGraph, Graph *nnGraph, int N, int K)
Returns the recall of the graph computed by NN-Descent, compared to the brute force graph.
Definition cppdescent.cpp:167