#pragma once #include #include "utils.h" // you can add more structures here or modify existing structrues. typedef struct HNSWGraph { size_t layers_num; // number of layers } HNSWGraph; typedef struct HNSWContext { size_t dim; // dimension of dataset size_t len; // size of dataset VecData *data; // vectors will be loaded into this array HNSWGraph *graph; // graph of HNSW } HNSWContext; // you can declare some help functions here, and implement them in 'hnsw.c' // public functions here // Please do not modify these function signatures! // To simply our program, we do not consider reclaiming memory space here. // TODO: Please implement these functions according to HNSW algorithm. HNSWContext *hnsw_init_context(const char *filename, size_t dim, size_t len); void hnsw_approximate_knn(HNSWContext *ctx, VecData *q, int *results, int k);