Class HnswBuild

Inheritance Relationships

Derived Type

Class Documentation

class n2::HnswBuild

Subclassed by n2::HnswBuildImpl< DistFuncType >

Public Functions

HnswBuild(int dim, DistanceKind metric)
~HnswBuild()
HnswBuild(const HnswBuild&) = delete
void operator=(const HnswBuild&) = delete
void AddData(const std::vector<float> &data)
void SetConfigs(const std::vector<std::pair<std::string, std::string>> &configs)
std::shared_ptr<const HnswModel> Build(int m, int max_m0, int ef_construction, int n_threads, float mult, NeighborSelectingPolicy neighbor_selecting, GraphPostProcessing graph_merging)
std::shared_ptr<const HnswModel> Build()
void PrintDegreeDist() const
void PrintConfigs() const

Public Static Functions

std::unique_ptr<HnswBuild> GenerateBuilder(int dim, DistanceKind metric)

Protected Functions

void SetConfigs(int m, int max_m0, int ef_construction, int n_threads, float mult, NeighborSelectingPolicy neighbor_selecting, GraphPostProcessing graph_merging)
int GetRandomNodeLevel()
int GetRandomSeedPerThread()
void BuildGraph(bool reverse)
void InitPolicies() = 0
void InsertNode(HnswNode *qnode, VisitedList *visited_list) = 0
void SearchAtLayer(HnswNode *qnode, const std::vector<HnswNode*> &enterpoints, int level, VisitedList *visited_list, std::priority_queue<FurtherFirst> &result) = 0
void Link(HnswNode *source, HnswNode *target, int level) = 0
void MergeEdgesOfTwoGraphs(const std::vector<HnswNode*> &another_nodes) = 0

Protected Attributes

std::shared_ptr<spdlog::logger> logger_
const std::string n2_signature = "TOROS_N2@N9R4"
size_t m_ = 12
size_t max_m_ = 12
size_t max_m0_ = 24
size_t ef_construction_ = 150
float level_mult_ = 1 / log(1.0 * m_)
int n_threads_ = 1
NeighborSelectingPolicy neighbor_selecting_ = NeighborSelectingPolicy::HEURISTIC
NeighborSelectingPolicy post_neighbor_selecting_ = NeighborSelectingPolicy::HEURISTIC_SAVE_REMAINS
GraphPostProcessing post_graph_process_ = GraphPostProcessing::SKIP
int max_level_ = 0
HnswNode *enterpoint_ = nullptr
std::vector<Data> data_list_
std::vector<HnswNode*> nodes_
int num_nodes_ = 0
size_t data_dim_ = 0
DistanceKind metric_
std::mutex max_level_guard_