Изменения

Перейти к: навигация, поиск
Маленький мир
Для маленького мира на точках в Евклидовом пространстве, жадный поиск K ближайших соседей будет выглядеть так:
'''knn'''(request, m, k)''':'''
nearest W = new TreeSet() <tex>\emptyset</tex> <font color="green">// ближайшие к q вершины упорядочены по возрастанию расстояния до request </font> candidates C = <tex>\emptyset</tex> <font color= new TreeSet()"green">// вершины, которые предстоит посетить </font> visited V = <tex>\emptyset</tex> <font color= new HashSet()"green">// посещённые вершины </font>
'''for''' i = 1 '''to''' m
candidates.add(C = С <tex>\bigcup</tex> случайная вершина графа) tempNearest TN = <tex>\emptyset</tex> <font color= new TreeMap()"green">// ближайшие вершины в этом проходе</font>
'''while''' ''true''
current u = candidates.popMin() удалить ближайшую к q вершину из С '''if''' current u дальше чем k-й элемент nearestW
'''break'''
'''for''' v e : смежные с current u вершины '''if''' !visited.contains(v)e <tex>{\notin}</tex> V candidates.add(v)C = C <tex>\bigcup</tex> e visited.add(v)V = V <tex>\bigcup</tex> e tempNearest.add(v) V = V <tex>\bigcup</tex> e nearest.addAll(tempNearest)W = W <tex>\bigcup</tex> TN '''return''' k первых вершин из nearestW
Очевидный недостаток этого алгоритма {{---}} опасность свалиться в локальный минимум, остановившись в каком-то кластере. С увеличением числа m, вероятность такого застревания экспоненциально падает.
120
правок

Навигация