A quick question about length of neighbors for one Element
xingtanzjr opened this issue · comments
Zhang.Jinrui commented
See this code snippet,
/*
* Load neighbors from page
*/
static void
LoadNeighborsFromPage(HnswElement element, Relation index, Page page, int m)
{
char *base = NULL;
HnswNeighborTuple ntup = (HnswNeighborTuple) PageGetItem(page, PageGetItemId(page, element->neighborOffno));
int neighborCount = (element->level + 2) * m;
Assert(HnswIsNeighborTuple(ntup));
HnswInitNeighbors(base, element, m, NULL);
Why is the neighborCount is (level + 2) * m
rather than (level + 1) * m
?
Andrew Kane commented
Layer 0 can have up to 2 * m
connections, as recommended in the HNSW paper.