1 #ifndef BMALGO_SIMILARITY__H__INCLUDED__ 2 #define BMALGO_SIMILARITY__H__INCLUDED__ 25 #ifndef BM__H__INCLUDED__ 28 # error missing include (bm.h or bm64.h) 43 template <
typename SO,
unsigned DMD_SZ,
typename IDX_VALUE,
typename SValue,
typename SFunc>
63 for (
size_t i = 0; i < DMD_SZ; ++i)
69 const SO* so2, IDX_VALUE i2,
73 for (
size_t i = 0; i < DMD_SZ; ++i)
85 for (
size_t i = 0; i < DMD_SZ; ++i)
93 for (
size_t i = 0; i < DMD_SZ; ++i)
135 template<
class SDESCR>
147 for(
size_t i = 0; i < descr_vect_.size(); ++i)
149 similaruty_descriptor_type& sdescr = descr_vect_[i];
151 const similarity_object_type* so1 = sdescr.get_first();
152 const similarity_object_type* so2 = sdescr.get_second();
159 similarity_functor func;
160 similarity_value_type d = func(dit, dit_end);
161 sdescr.set_similarity(d);
167 std::sort(descr_vect_.begin(), descr_vect_.end(), std::greater<SDESCR>());
172 descr_vect_.reserve(cap);
177 descr_vect_.push_back(sdt);
189 template<
class SIMBATCH,
class SV>
193 size_t plains = sv.plains();
194 sbatch.reserve((plains * plains) / 2);
202 for (
unsigned i = 0; i < plains; ++i)
207 for (
unsigned j = i+1; j < plains; ++j)
210 if (bv2 && bv1 != bv2)
212 sbatch.push_back(
typename SIMBATCH::similaruty_descriptor_type(bv1, i, bv2, j, &dmd[0]));
void calculate()
run the similarity calculation using distance metrics engine
distance_metric_descriptor * distance_begin()
IDX_VALUE get_first_idx() const
IDX_VALUE get_second_idx() const
const SO * get_first() const
std::vector< SDESCR > vector_type
void build_jaccard_similarity_batch(SIMBATCH &sbatch, const SV &sv)
Utility function to build jaccard similarity batch for sparse_vector<>
const SO * get_second() const
pre-processor un-defines to avoid global space pollution (internal)
bool operator>(const similarity_descriptor &sd) const
Distance metric descriptor, holds metric code and result.
SValue similarity_value_type
SDESCR::similarity_functor similarity_functor
void push_back(const similaruty_descriptor_type &sdt)
void distance_operation(const BV &bv1, const BV &bv2, distance_metric_descriptor *dmit, distance_metric_descriptor *dmit_end)
Distance computing template function.
Bit manipulation primitives (internal)
SValue similarity() const
SDESCR similaruty_descriptor_type
similarity_descriptor(const SO *so1, const SO *so2, const distance_metric_descriptor *dmd_ptr)
similarity_descriptor(const similarity_descriptor &sd)
similarity_descriptor(const SO *so1, IDX_VALUE i1, const SO *so2, IDX_VALUE i2, const distance_metric_descriptor *dmd_ptr)
void set_similarity(SValue s)
SDESCR::similarity_value_type similarity_value_type
SO similarity_object_type
distance_metric_descriptor dmd_[DMD_SZ]
void set_metric(size_t i, distance_metric metric)
distance_metric
Distance metrics codes defined for vectors A and B.
similarity_descriptor & operator=(const similarity_descriptor &sd)
std::vector< SDESCR > descr_vect_
SDESCR::similarity_object_type similarity_object_type
distance_metric_descriptor * distance_end()