120
правок
Изменения
→Операции над структурой
Жадно идём по уровню в сторону запроса.
'''searchLayer'''(q, ep, ef, layer)''':'''
<font color="green">// ВводВходные данные: запрос q, входные точки ep, искомое количество ближайших соседей ef, номер слоя layer</font> <font color="green">// ВыводВозвращает: ef ближайших соседей q в слое layer</font>
candidates = new TreeSet(ep) <font color="green">// Вершины упорядочены по возрастанию расстояния до q. </font>
result = new TreeSet(ep)
На нулевом уровне жадно ищем '''K''' ближайших соседей.
'''knn'''(hnsw, q, K, ef)''':'''
<font color="green">// ВводВходные данные: граф hnsw, запрос q, искомое количество ближайших соседей K, количество кандидатов при поиске ef</font> <font color="green">// ВыводВозвращает: K ближайших соседей q</font>
result = new TreeSet() <font color="green">// Вершины упорядочены по возрастанию расстояния до request. </font>
ep = случайная вершина из верхнего слоя hnsw
Жадно ищем '''M''' ближайших вершин к '''q''' на каждом уровне, на котором она представлена; добавляем связи '''q''' с ними; удаляем лишние связи у новообразовавшихся соседей.
'''insert'''(hnsw, q, m, mMax, ef, mL)''':'''
<font color="green">// ВводВходные данные: граф hnsw, запрос на добавление q, желаемое количество связей m, максимальное количество связей вершины </font>
<font color="green">// на одном слое mMax, количество кандидатов при поиске ef, коэффициент выбора высоты mL. </font>
<font color="green">// ВыводВозвращает: hnsw с вставленным элементом q. </font>
result = new TreeSet() <font color="green">// Вершины упорядочены по возрастанию расстояния до q. </font>
ep = случайная вершина из верхнего слоя hnsw