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
===Поиск ближайших соседей во всей структуре===