120
правок
Изменения
→Поиск ближайших соседей в слое
Жадно идём по уровню в сторону запроса.
'''searchLayer'''(q, ep, ef, layer)''':'''
<font color="green">// Входные данные: Входные данные: иерархия графов hnsw, запрос q, входные точки ep, искомое количество ближайших соседей ef, номер слоя layer</font>
<font color="green">// Возвращает: ef ближайших соседей q в слое layer</font>
'''break''' <font color="green">// Мы в локальном минимуме. </font>
'''for''' v e : смежные с current вершины в слое layer(u, e) '''in''' G '''if''' !visited.contains(r)e <tex>{\notin}/tex> V visited.add(v)V = V <tex>\bigcup</tex> e furthest f = result.getMax(){q1 | <tex>\forall</tex> q2 <tex>\in</tex> W, |q - q1| >= |q - q2|} '''if''' distance(v, |e - q) | < distance(furthest, |f - q) | or result.count() |W| < ef candidates.add(v)C = C <tex>\bigcup</tex> e result.add(v)W = W <tex>\bigcup</tex> e if result.count() |W| > ef result.removeLast()W = W \ {q1 | <tex>\forall</tex> q2 <tex>\in</tex> W, |q - q1| >= |q - q2|} '''return''' resultW
===Поиск ближайших соседей во всей структуре===