20 #ifndef GAIA_FROZENSEARCH_H 21 #define GAIA_FROZENSEARCH_H 25 #include "frozendataset.h" 26 #include "frozendistance.h" 27 #include "frozeneuclideandistance.h" 28 #include "frozencosineangledistance.h" 29 #include "frozenlinearcombinationdistance.h" 30 #include "distancefunction.h" 39 inline QString RTIME(
double t) {
40 QString num = QString::number(t*1000,
'f', 4);
41 return QString(8-num.size(),
' ') + num;
45 void normalSearch(DataSet& dataset,
const DistanceFunction* dist,
const Point& query,
int N);
48 class EuclideanDistance {
51 EuclideanDistance(
int dimension) : dim(dimension) {}
53 float operator()(
const float*
const p1,
const float*
const p2)
const;
61 float operator()(
const float*
const p1,
const float*
const p2)
const;
67 typedef std::pair<float, int> fspoint;
70 template <
typename DistanceFunction>
71 void frozenSearch(
const DataSet& dataset,
const float* frozenDataSet,
int dimension,
73 int npoints = dataset.size();
75 std::vector<fspoint> result(npoints);
79 for (
int n=0; n<N; n++) {
81 for (
int i=0; i<npoints; i++) {
82 result[i].first = dist(&frozenDataSet[i*dimension], queryPoint);
86 partial_sort(result.begin(), result.begin() + 100, result.end());
90 G_INFO(
"Average on " << N <<
" runs using naive frozen Gaia datasets and views: " 91 << RTIME(chrono.
elapsed()/N) <<
"ms / query");
93 for (
int i=0; i<5; i++) {
94 G_DEBUG(GTools, i <<
" - " << result[i].first <<
" - " << dataset[result[i].second]->
name());
105 void deepMultiFreeze(
FrozenDataSet& frozenDS,
const QList<FrozenDistance*>& dists,
106 const QList<Eigen::RowVectorXf> queries,
int N);
110 #endif // GAIA_FROZENSEARCH_H Definition: frozendistance.h:33
double elapsed() const
Returns the cumulative number of seconds elapsed between each call to the start()/stop() pair...
Definition: timer.cpp:51
This class represents a dataset and all related information.
Definition: dataset.h:91
void start()
Starts the timer.
Definition: timer.cpp:32
Main Gaia namespace, which contains all the library functions.
Definition: addfield.cpp:22
Real operator()(const Point &p1, const Point &p2, int seg1, int seg2) const
This function computes the distance between the two given points.
Definition: euclideandistance.cpp:31
Definition: distancefunction.h:37
void stop()
Stops the timer.
Definition: timer.cpp:42
A FrozenDataSet is a dataset that has been flagged as immutable.
Definition: frozendataset.h:49
Definition: frozensearch.h:56
QString name
Name for the metric, usually the key that was used to instantiate it from the factory.
Definition: distancefunction.h:44
This class allows you to measure a certain amount of time, for instance if you want to know how long ...
Definition: timer.h:38