23 #include "../common/vector_util.hpp"
33 namespace recommender {
44 const std::string&
id, std::vector<std::pair<std::string, float> >& ids,
45 size_t ret_num)
const {
54 vector<pair<string, float> >& ids,
55 size_t ret_num)
const {
79 vector<pair<string, float> > ids;
81 if (ids.size() == 0) {
85 size_t exist_row_num = 0;
86 for (
size_t i = 0; i < ids.size(); ++i) {
89 if (row.size() == 0) {
94 for (
size_t j = 0; j < row.size(); ++j) {
95 ret.push_back(make_pair(row[j].first, row[j].second));
99 if (exist_row_num == 0) {
103 for (
size_t i = 0; i < ret.size(); ++i) {
104 ret[i].second /= exist_row_num;
111 if (q1_norm == 0.f || q2_norm == 0.f) {
114 sort(q1.begin(), q1.end());
115 sort(q2.begin(), q2.end());
120 while (i1 < q1.size() && i2 < q2.size()) {
121 const string& ind1 = q1[i1].first;
122 const string& ind2 = q2[i2].first;
125 }
else if (ind1 > ind2) {
128 ret += q1[i1].second * q2[i2].second;
134 return ret / q1_norm / q2_norm;
139 for (
size_t i = 0; i < query.size(); ++i) {
140 ret += query[i].second * query[i].second;
142 return std::sqrt(ret);
static float calc_l2norm(const common::sfv_t &query)
void get_row(const std::string &row, std::vector< std::pair< std::string, float > > &columns) const
void decode_row(const std::string &id, common::sfv_t &ret) const
virtual void similar_row(const common::sfv_t &query, std::vector< std::pair< std::string, float > > &ids, size_t ret_num) const =0
void complete_row(const std::string &id, common::sfv_t &ret) const
virtual void neighbor_row(const common::sfv_t &query, std::vector< std::pair< std::string, float > > &ids, size_t ret_num) const =0
core::storage::sparse_matrix_storage orig_
void sort_and_merge(sfv_t &sfv)
std::vector< std::pair< std::string, float > > sfv_t
static float calc_similality(common::sfv_t &q1, common::sfv_t &q2)
virtual ~recommender_base()
static const uint64_t complete_row_similar_num_