Skip to content

Commit

Permalink
Fix inefficiency in constructing reverse label map (#373)
Browse files Browse the repository at this point in the history
* single loop for reverse label map

* clang formatting

* unnecessary comments removed

* minor

---------

Co-authored-by: Varun Sivashankar <[email protected]>
  • Loading branch information
2 people authored and ravishankar committed Jun 13, 2023
1 parent e1eb622 commit d7c8107
Showing 1 changed file with 14 additions and 17 deletions.
31 changes: 14 additions & 17 deletions src/index.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1919,28 +1919,25 @@ void Index<T, TagT, LabelT>::build_filtered_index(const char *filename, const st

std::unordered_map<LabelT, std::vector<uint32_t>> label_to_points;

for (typename tsl::robin_set<LabelT>::size_type lbl = 0; lbl < _labels.size(); lbl++)
for (uint32_t point_id = 0; point_id < num_points_to_load; point_id++)
{
auto itr = _labels.begin();
std::advance(itr, lbl);
auto &x = *itr;

std::vector<uint32_t> labeled_points;
for (uint32_t point_id = 0; point_id < num_points_to_load; point_id++)
for (auto label : _pts_to_labels[point_id])
{
bool pt_has_lbl = std::find(_pts_to_labels[point_id].begin(), _pts_to_labels[point_id].end(), x) !=
_pts_to_labels[point_id].end();

bool pt_has_univ_lbl =
(_use_universal_label && (std::find(_pts_to_labels[point_id].begin(), _pts_to_labels[point_id].end(),
_universal_label) != _pts_to_labels[point_id].end()));

if (pt_has_lbl || pt_has_univ_lbl)
if (label != _universal_label)
{
label_to_points[label].emplace_back(point_id);
}
else
{
labeled_points.emplace_back(point_id);
for (typename tsl::robin_set<LabelT>::size_type lbl = 0; lbl < _labels.size(); lbl++)
{
auto itr = _labels.begin();
std::advance(itr, lbl);
auto &x = *itr;
label_to_points[x].emplace_back(point_id);
}
}
}
label_to_points[x] = labeled_points;
}

uint32_t num_cands = 25;
Expand Down

0 comments on commit d7c8107

Please sign in to comment.