Научная статья на тему 'Параллельный алгоритм поиска ближайшей точки в радиусе'

Параллельный алгоритм поиска ближайшей точки в радиусе Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
1048
408
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ПАРАЛЛЕЛЬНЫЙ АЛГОРИТМ / ПОИСК БЛИЖАЙШИХ СОСЕДЕЙ / VP-ДЕРЕВО / OPENMP

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Могилко А. А.

В данной статье представлен анализ существующих алгоритмов поиска ближайших соседей, описан оригинальный алгоритм поиска ближайших соседей, разработан параллельный алгоритм поиска ближайших соседей в радиусе, описана реализация алгоритма, с использованием параллельных вычислений, приведены эксперименты по оценке производительности программной реализации алгоритма. Предлагаемое решение представляет собой библиотеку, написанную на языке программирования C++. Область применения такой библиотеки – это системы, работающие в области геокоординат, моделирование движения жидкости и другие области, трерующие нахождение соседних объектов среди большого количества данных.

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Могилко А. А.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Параллельный алгоритм поиска ближайшей точки в радиусе»

НАУЧНОЕ ИЗДАНИЕ МЕТУ ИМ. Н. Э. БАУМАНА

НАУКА и ОБРАЗОВАНИЕ

Эл № ФС77 - 48211. Государственная регистрация №0421200025. КБМ 1994-0408

электронный научно-технический журнал

Параллельный алгорит поиска ближайшей точки в радиусе

# 11, ноябрь 2013

Б01: 10.7463/1113.0624368

Могилко А. А.

УДК 004.93'1

Россия, МГТУ им. Н.Э. Баумана CMogilko@gmail. com

Введение

В настоящее время актуальной является задача поиска ближайших соседей, которая заключается в выборе точек среди некоторого множества точек, находящихся в метрическом пространстве, согласно некоторой функции расстояния, близости.

Такая задача возникает в многих предметных областях. Например, решение этой задачи необходимо в классификации текстов [1], персонализированной агрегации новостей, рекомендательных системах [2], онлайновых системах рекламы [3], семантическом поиске [4].

Однако существуют предметные области, в которых необходимо искать ближайшие точки в замкнутом метрическом пространстве. Одним из таких примеров являются геонауки [5], в которых часто возникает задача глобального поиска близких географических объектов по всему земному шару. При моделировании движения жидкости на основе метода сглаженных частиц наибольшее время на каждом шаге моделирования занимает поиск для каждой частицы всех соседей в радиусе взаимодействия [6]. Объем данных в этих задачах постоянно увеличивается, а ответ нужен мгновенно.

Пусть дано некоторое метрическое пространство (5, й) и некоторое конечное подмножество с 5, представляющее базу, на которой строятся запросы. Наша задача так организовать чтобы поиск ближайших соседей был наиболее эффективен.

Рисунок 1 . Поиск ближайших соседей на сфере в радиусе

Для запроса £ 5д, задача поиска ближайшего соседа состоит из поиска одного наиболее близко расположенного элемента из к точке ц. Такая задача обозначается

Также существует поиск к ближайших соседей kNN(q, к,50\ в данной работе мы рассматриваем случай поиска всех соседей в радиусе от заданной точки NNR(q, г,5л).

Важным ограничением является то, что метрическое пространство может быть замкнутым - для случая поиска на сфере.

В данной работе предложен параллельный алгоритм поиска ближайших соседей на сфере в радиусе от заданной точки (точек, находящихся на расстоянии не более заданного от центра поиска).

1 Алгоритмы поиска ближайших соседей

Среди алгоритмов поиска ближайших соседей можно выделить линейный поиск, поиск в Ю-деревьях [8], поиск в ББР-деревьях [9], ЬБ-хеширование [10], метод редких точек [11] и поиск в УР-деревьях [7]. ЬБ-хеширование и метод редких точек основаны на

свойствах сложных объектов, в том числе текста, для бинарных данных выигрыша добиться сложно. Ш- и BSP-деревья сложно адаптируются для многомерных замкнутых пространств, а линейный поиск заведомо медленный. Поэтому за основу берется поиск в УР-деревьях.

1.1. Линейный поиск

Линейный поиск, или полный перебор - наиболее простой в реализации алгоритм, который просматривает каждый элемент множества и проверяет, удовлетворяет ли тот заданному условию.

Важным достоинством является отсутствие необходимости подготовительных операциях, алгоритм может работать сразу на множестве элементов. Из-за этой особенности очень часто линейный поиск используется другими алгоритмами для обработки небольших массивов.

Для решения поставленной задачи не приемлем, в силу линейной сложности - О(п) - не лучший алгоритм обработки больших массивов.

1.2. Поиск в кБ-деревьях

Ш-дерево или к-мерное дерево - структура данных, служащая для организации точек в к-мерном пространстве. Является частным случаем бинарного дерева поиска. Разбиение пространства происходит по одной из координатных осей так, чтобы точка разбиения была посередине между наиболее удаленными объектами вдоль этой оси. Разбиение происходит рекурсивно с циклическим чередованием координатных осей [3]. Пример карты Ш-дерева представлен на рисунке 2.

0

• 4

5 6

3

1 2

Рисунок 2. Ш-дерево.

Алгоритм поиска проходит по дереву и производит поиск только в том листе дерева, чей центр ближе к точке запроса.

Является наиболее простым видом дерева, поиск эффективней линейного. Сложность алгоритма поиска составляет О (к ■ п1 t), где к - размерность пространства, что для двухмерного случая будет О (2л/п) [3].

Недостатками данного алгоритма является ситуация «чайник на стадионе», когда при неравномерно распределенных данных большинство листьев дерева пустуют, а обход в заполненных листьях происходит линейным поиском на всем массиве данных. Другим недостатком является повышающаяся сложность в многомерных пространствах и неадаптированность к замкнутым пространствам. В случае замкнутых пространств возможна ситуация, при которой две соседние точки будут в разных листах дерева, из-за их нахождения в начале и в конце координат.

1.3. Поиск в BSP-деревьях

Этот алгоритм применяется в компьютерной графике для определения приоритетов визуализации объектов. BSP-дерево является методом рекурсивного разбиения пространства на выпуклые множества гиперплоскостями. Каждое разбиение делит пространство на два подмножества, что позволяет построить двоичное дерево.

Недостатками алгоритма являются необходимость в поиске гиперплоскости, что приводит к возрастанию сложности в многомерном пространстве, связанному с ростом числа координат, и неадаптированность к замкнутым пространствам, аналогично kD-деревьям.

Сложность алгоритма поиска составляет О (к - п1 fc), где к - размерность пространства, что для двухмерного случая будет О (2.л/п)

1.4. LS-хэширование

Данный алгоритм основывается на допущении, что можно найти такую хэш-функцию h, что для любых точек p, q и границы R:

Если d(p, q) < R, то h(p) = h(q) с вероятностью как минимум Pi;

Если d(p, q) > ей, то h(p) = h{q) с вероятностью не более Рг.

Хотя сложность алгоритма поиска составляет О (п), эта хэш-функция будет настолько проста, что использование её вместо сравнения координат точек даст большой выигрыш, компенсирующий большую сложность линейного поиска.

Недостатком данного алгоритма в нашем случае является невозможность составить настолько простую хэш-функцию для точек с числовыми координатами.

1.5. Метод редких точек

Идея алгоритма заключается в хранении списка объектов, имеющих «редкие» координаты. В нашем случае также метод не применим, в силу невозможности выделить «редкие» координаты в метрическом пространстве с числовыми координатами.

Сложность алгоритма поиска составляет 0(п).

1.6. VP-дерево

VP-деревья, от слов Vantage point - опорная точка, основываются на выборе опорной точки и разбиении множества точек на 2 поддерева по принципу среднего расстояния от этой опорной точки до остальных точек множества. Каждый узел дерева имеет центральную точку и радиус, точки находящиеся в котором принадлежат узлу. Пример карты VP-дерева представлен на рисунке 3. Работа с точками происходит только с помощью функции расстояния, алгоритм с отдельными координатами точек не имеет дела, поэтому размерность пространства и его замкнутость не имеют значения [7]. Сложность алгоритма построения дерева - 0(п ■ logn), алгоритма поиска - O(logn).

2 Алгоритм построения VP-дерева

Построение VP-дерева является рекурсивной процедурой, как и большинство алгоритмов построения других видов деревьев. На входе имеется множество точек, для которого необходимо построить дерево. На первой итерации алгоритма все множество разбивается на два поддерева и для каждого поддерева повторяется аналогичная операция.

На каждой итерации построения поддерева необходимо выбрать опорную точку и вычислить среднее расстояние от неё до всех остальных точек. Входное множество точек разбивается на две части, относя точку в множество точек внутреннего (или левого) поддерева, если расстояние от неё до опорной точки меньше среднего, и в множество точек внешнего (или правого) в противном случае. Для каждого множества выполняется рекурсивная операция построения дерева до тех пор, пока размеры множеств не достигнут заданного предела - максимального размера листа [4]. Алгоритм приведен в Листинге 1.

function Make_vp_tree(S)

if S = 0 then return 0; new(node);

node.center := Select_vp(S); //выбор опорной точки node, radius := Medians^sdist{center,s')\

L := {s6 5- [center]\dist(center, s) < radius}

R : = {s E5 - [center}\dist(center, s) > radius}

node.left = Make_vp_tree(L); node.right = Make_vp_tree(R);

Листинг 1. Построение VP-дерева.

Если для каждого узла дерева находить опорную точку, которая бы образовала поддерево с половиной точек. Предлагается статистический подход [7]. Выбор опорной точки происходит следующим образом: выберем определенный набор случайных точек множества, это точки-кандидаты в опорные точки. Для каждой точки из этого набора выберем ещё один набор случайных точек. Для каждой точки из первого набора найдем разброс среднего расстояния до всех точек второго набора. Точка из первого набора, имеющая наибольший разброс, будет охватывать наибольшее количество точек во всем множестве. Описанный принцип представлен на Рисунке 4.

Рисунок 4. Выбор опорной точки.

Точка-кандидат охватит большее количество точек, а следовательно, и половина от них будет ближе к половине всех точек, если разброс расстояния до точек второго набора будет максимальным. Данные шаги изложены в Листинге 2.

function Select_vp(S)

P := Random sample of S // точки-кандинаты best_spread := 0

for pe P

D := Random sample of S

mu := MediandeDdist(j>, d)

//Разброс среднего расстояния от точек-кандидатов spread : = 2nd — МomentdED(dist(p,d) — mu)

if spread > best_spread

best_spread := spread; best_p := p; return best_p;

Листинг 2. Выбор опорной точки.

3 Алгоритм поиска ближайших соседей в VP-дереве

3.1 Исходный алгоритм поиска

Оригинальный алгоритм поиска в VP-дереве [7] предполагает только поиск одного ближайшего соседа. Рассмотрим исходный алгоритм.

Начиная с корневого узла дерева, необходимо находить расстояние до центра узла, и если оно меньше радиуса области узла, продолжить поиск во внутреннем поддереве, иначе во внешнем. По достижении листа выполнить линейный поиск среди точек листа [4]. Данные шаги представлены в Листинге 3.

function SearchNN(node, s)

if dist(s, node.center) < node.radius

if node.left is leaf

LinearSearch(node.left, s);

else

SearchNN(node.left, s)

else

if node.right is leaf

LinearSearch(node.right, s);

else

SearchNN(node.right, s)

Листинг 3. Поиск ближайшего соседа в VP-дереве.

3.2 Модификация алгоритма поиска

Для поиска ближайших соседей в радиусе необходимо модифицировать алгоритм поиска одного соседа. Возможны ситуации, когда искомые точки находятся в нескольких листьях. В таком случае необходимо выявлять факт выхода области поиска из области узла, и если факт подтверждается, то производить поиск в обоих поддеревьях. Данная ситуация изображена на Рисунке 5. Область поиска входит целиком во внутреннее поддерево первого разбиения (красное), но далее искомые точки содержатся уже в обоих поддеревьях.

Рисунок 5. Пересечение области поиска и области узла

Чтобы выяснить, входит ли область поиска целиком во внутреннее поддерево, необходимо, чтобы выполнялось условие (3.1).

diq.s) — У < Т (3.1)

где d(q,s) - расстояние от центра узла до точки поиска, r - радиус поиска, T - радиус узла, граница внутреннего поддерева.

Если это условие выполняется, то поиск можно продолжать только во внутреннем поддереве, иначе придется идти по обоим.

Чтобы выяснить, входит ли область поиска целиком во внешнее поддерево, необходимо выполнение условия (3.2).

Если это условие выполняется, то поиск можно продолжать только во внешнем поддереве. Модифицированный алгоритм представлен в Листинге 4.

function SearchNNR(node, s, r)

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

if dist(s, node.center) - r < node.radius if node.left is leaf

LinearSearch(node.left, s, r)

else

SearchNNR(node.left, s, r) if dist(s, node.center) + r > node.radius if node.right is leaf

LinearSearch(node.right, s, r);

else

SearchNNR(node.right, s, r)

Листинг 4. Поиск ближайших соседей в радиусе в VP-дереве.

4 Использование параллельных вычислений

Системы, использующие задачу поиска ближайших соседей, как правило, базируются на серверах или кластерных компьютерах, основная мощь которых заключается в большом числе процессоров. А потому, как получить большую производительность на одном процессоре можно только использовав алгоритм с меньшей сложностью, что не всегда возможно, то дальнейшее увеличение производительности можно получить только используя параллельные программы.

Существуют два типа параллельного взаимодействия: взаимодействие через разделяемую память и через распределенную память.

Взаимодействие через распределенную память

При таком типе взаимодействия программа делится на процессы, взаимодействующие между собой с помощью системы сообщений. Процессы изолированы друг от друга и могут исполняться на разных машинах внутри кластера. Единственный способ передачи данных между процессами - обмен сообщениями.

Такой тип взаимодействия не подходит для алгоритмов построения и обхода деревьев, потому как такие алгоритмы рекурсивно ветвятся, в начальный момент используется только один процесс, который при необходимости идет по двум веткам рекурсии. В таком случае появляется необходимость либо всем процессам повторять все шаги до расхождения, либо простаивать и при расхождении передавать все полученные данные новым задействованным процессам.

Взаимодействие через разделяемую память

При таком виде взаимодействия программа делится на потоки, взаимодействующие между собой с помощью объектов синхронизации - семафоров, мьютексов, мониторов. Потоки исполняются в одном пространстве памяти и могут легко создаваться на лету или браться из пула потоков.

Такой тип взаимодействия подходит для алгоритмов построения и обхода деревьев в силу отсутствия необходимости передавать все предыдущие шаги до расхождения рекурсивных веток, все обращения к общей памяти для записи остаются безопасными с использованием объектов синхронизации.

5 Параллельный алгоритм построения VP-дерева

В алгоритме построения VP-дерева рекурсия разветвляется надвое всегда, и каждая ветка рекурсии не зависит от соседней ей, а также не вносит никаких изменений в данные, полученные на предыдущем шаге рекурсии, наилучшим решением будет выполнение новых двух веток рекурсии параллельно, что отражено в Листинге 5.

Небольшие действия, выполняющиеся в одной итерации построения узла дерева, нельзя распараллеливать, потому что накладные расходы на создание потоков будут слишком большие по сравнению с выигрышем от небольшой операции.

Также необходимо следить за числом потоков и ограничить их количество максимальным число процессоров, иначе накладные расходы на диспетчеризацию будут возрастать, а число одновременно исполняемых потоков - нет. При достижении максимального числа потоков необходимо выполнять обе ветки рекурсии последовательно.

function Make_vp_tree(S)

if S = 0 then return 0; new(node);

node.center := Select_vp(S); node.radius := MedianseSdist(center,s)-,

L := {s E S — [center}\dist(center, s) < radius}

R := {s £ S — [center}\dist(center, s) > radius}

if (threadCount > threadsMax)

node.left = Make_vp_tree(L); node.right = Make_vp_tree(R);

else

threadCount += 1;

Parallel

{

node.left = Make_vp_tree(L); node.right = Make_vp_tree(R);

}

threadCount -= 1;

Листинг 5. Параллельное построение VP-дерева.

6 Параллельный алгоритм поиска в VP-дереве

В алгоритме поиска в VP-дереве рекурсия разветвляется надвое при необходимости поиска в обоих поддеревьях, при этом каждая ветка рекурсии зависит от других только по добавлению точек в массив результатов. Лучшим решением будет выполнение новых двух веток рекурсии параллельно, что отражено в Листинге 6.

При достижении листа необходимо с помощью линейного поиска найти всех ближайших соседей в радиусе, среди множества точек, принадлежащих листу. При этом добавление результатов в массив должно быть потокобезопасным. В случае большого количества результатов обращение к критической секции становится чаще, что негативно сказывается на производительности.

Для решения этой проблемы можно предложить составной массив для записи результатов. Каждый поток добавляет результаты только в свой подмассив, таким образом, пропадает необходимость в критической секции.

function Search(node, s, r, id)

sleft := dist(s, node.center) - r < node.radius; sright := dist(s, node.center) + r > node.radius; if ((sleft OR sright) AND NOT (sleft = sright)

AND (threadCount < threadsMax))

if (sleft)

if node.left is leaf

LinearSearch(node.left, s, r, id);

else

Search(node.left, s, r, id)

else

if node.right is leaf

LinearSearch(node.right, s, r, id);

else

Search(node.right, s, r, id)

else

threadCount += 1;

Parallel sections

{

Section

{

if node.left is leaf

LinearSearch(node.left, s, r, id);

else

Search(node.left, s, r, id);

}

Section

{

if node.right is leaf

LinearSearch(node.right, s, r,newid);

else

Search(node.right, s, r, newid);

}

}

threadCount -= 1;

Листинг 6. Параллельный поиск в VP-дереве.

7 Эксперименты по оценке производительности алгоритмов поиска

Для проведения экспериментов были сгенерированы случайные массивы точек размерами 10 000 000 точек в двухмерном евклидовом пространстве. Генерация производилась с равномерным распределением с диапазоном значения координат ([0; 10], [0; 10]) для случая на плоскости и ([0; 2тг], [— ~;~]) для случая на сфере, соответственно.

Для случая на плоскости функцией расстояния является формула (7.1), для случая на сфере - (7.2).

F{R,x1,y1,x1,yO = R cos_1(sin(y1) • sin(y2) + cos^) ■ cos(y2) ■ cos(x! - x2)) (7.2)

На рисунках 6 - 7 представлены графики производительности линейного поиска и поиска в VP-дереве (в параллельной и последовательной версиях), на оси абсцисс представлен объем выдачи поиска - число точек, удовлетворяющих условию запроса. На оси ординат представлено относительное ускорение времени поиска по отношению к времени линейного поиска на одном процессоре.

Рисунок 6. Сравнительный график производительности поиска на плоскости для

10 000 000 точек.

Рисунок 7. Сравнительной график производительности поиска на сфере для 10 000 000

точек.

Как видно из графиков, использование параллельного алгоритма поиска в УР-дереве позволяет получить ускорение до 15 раз по сравнению с линейным поиском.

Наиболее успешные результаты поиск в УР-дереве получает на точных запросах, когда объем результатов мал относительно всего массива данных (левее на графике). Если запрос неточен и радиус поиска велик, то проход осуществляется по большей части дерева (правее на графике), приближая поиск к линейному поиску с дополнительными расходами на сам обход дерева.

Также следует отметить отсутствие существенных отличий в поиске на плоскости и на сфере, небольшая разница во времени поиска может возникать только в случае использования сложной функции расстояния между точками.

На рисунке 8 представлен график сравнения времени построения УР-дерева на одном и четырех процессорах, показано, что использование параллельных вычислений позволяет значительно ускорить время построения дерева.

Время построения, сек

100 000 1 000 000 10 000 000 массиве

Рисунок В. Сравнение времени построения VP-дерева.

8 Эффективность распараллеливания

Для замеров использовался компьютер с процессором Intel Core i7, имеющий 4 ядра. Объем выборки составлял 10 млн. точек. Показателями успешного распараллеливания программ являются ускорение (8.1) и эффективность (8.2), представленные на рисунках 9 и 10, соответственно. Ускорение- это отношение времени выполнения на одном процессоре к времени на p процессорах. Эффективность -ускорение, деленное на количество процессоров.

(8.1)

(8.2)

где Т1 - время выполнения на одном процессоре,

Тр - время выполнения на р процессорах.

Рисунок 9. Ускорение распараллеливания алгоритма построения и поиска в УР-дереве

Рисунок 10. Эффективность распараллеливания алгоритма построения и поиска в УР-

дереве

Линейное падение эффективности вызвано блокировками на добавление результатов в массив, а так же тем, что какое-то время остальные процессоры простаивают, пока обход не пойдёт по разным веткам дерева.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Заключение

Описан алгоритм поиска ближайших соседей в радиусе с использованием VP-деревьев. Разработана параллельная версия алгоритма на разделяемой памяти. Показана эффективность и ускорение распараллеливания на четырех процессорах 65% и 2.6, соответственно. Показано ускорение относительно линейного поиска на одном процессоре до 15 раз.

Список литературы

1. Агеев М.С., Добров Б.В. Метод эффективного расчета матрицы ближайших соседей для полнотекстовых документов // Вестник Санкт-Петербургского университета. Сер. 10. Прикладная математика. Информатика. Процессы управления. 2011. № 3. С. 72-84.

2. Кольчугина Е.А., Макарь В.А. Метод коллаборативной фильтрации для масштабируемых рекомендательных систем // Современные научные исследования и инновации. 2012. № 6. Режим доступа: http://web.snauka.ru/issues/20l2/06/l43l6 (дата обращения 01.10.2013).

3. Vikash Kumar Singh. Role of Search Engine Optimization in Web Technology for Commercialization Rationale by Vikash Kumar Singh // International Journal of Creative Research Thoughts. 2013. Vol. 1, no. 2. Режим доступа: http://ijcrt.com/UploadedArticle/l2.pdf (дата обращения 01.10.2013).

4. Fanizzi N., d’Amato C., Esposito F. Semantic Nearest Neighbor Search in OWL Ontologies. Dipartimento di Informatica, Universit'a degli studi di Bari Campus Universitario, Italy. Режим доступа: http://ftp.informatik.rwth-aachen.de/Publications/CEUR-WS/Vol-3l4/38.pdf (дата обращения 23.09.2013).

5. Vaca-Castano G., ZamirA.R., Shah M. City Scale Geo-Spatial Trajectory Estimation of a Moving Camera. Computer Vision Lab, University of Central Florida, 2012. Режим доступа: http://www.cs.ucf.edu/~aroshan/index files/CVPRl2 Amir.pdf (дата обращения 23.09.2013).

6. Гусев Д.И. Алгоритм поиска ближайших соседей // Программные продукты и системы. 2012. № 3. С. 231-234. Режим доступа:

http://www.swsys.ru/index.php?page=article&id=3249 (дата обращения 23.09.2013).

7. Yianilos P.N. Data Structures and Algorithms for Nearest Neighbor Search in General Metric Spaces. Режим доступа: http://www.cs.iastate.edu/~honavar/nndatastructures.pdf (дата обращения 23.09.2013).

В. Panigrahy R. An Improved Algorithm Finding Nearest Neighbor Using Kd-trees.

Microsoft Research, Mountain View CA, USA, 200В. Режим доступа: http://theory.stanford.edu/~rinap/papers/kdtreelatin.pdf (дата обращения 23.09.2013).

9. Maneewongvatana S., Mount D.M. An Empirical Study of a New Approach to Nearest Neighbor Searching. Department of Computer Science, University of Maryland, Maryland. Режим доступа: http://www.cs.umd.edu/~mount/Papers/alenex0l-empir.pdf (дата обращения 23.09.2013).

10. Jia Pan, Dinesh Manocha. Fast GPU-based Locality Sensitive Hashing for K-Nearest Neighbor Computation. Department of Computer Science, UNC Chapel Hill, 2011. Режим доступа: http://gamma.cs.unc.edu/KNN/gpuknn.pdf (дата обращения 23.09.2013).

11. Tao Y., Sheng C. Fast Nearest Neighbor Search with Keywords. Режим доступа: http://www.cse.cuhk.edu.hk/~taoyf/paper/tkdel3-spakey.pdf (дата обращения 23.09.2013).

SCIENTIFIC PERIODICAL OF THE BAUMAN MSTU

SCIENCE and EDUCATION

EL № FS77 - 48211. №0421200025. ISSN 1994-0408

electronic scientific and technical journal

Parallel algorithm for searching the nearest point within a certain range

# 11, November 2013 DOI: 10.7463/1113.0624368 Mogilko A.A.

Bauman Moscow State Technical University, 105005, Moscow, Russian Federation

[email protected]

This paper presents an analysis of existent nearest neighbor algorithms, and a description of a new nearest neighbor algorithm. A parallel version of the proposed algorithm was developed; its implementation using parallel computations was also described. Experimental results on estimating efficiency of the developed program implementation were provided. The proposed implementation is a C++ library. Possible application domains are geo-systems, liquid motion simulation and other areas where it is required to determine the nearest neighbors in a large bulk of data.

Publications with keywords: parallel algoritm, nearest neighbor search, VP-tree, OpenMP Publications with words: parallel algoritm, nearest neighbor search, VP-tree, OpenMP

References

1. Ageev M.S., Dobrov B.V. Metod effektivnogo rascheta matritsy blizhayshikh sosedey dlya polnotekstovykh dokumentov [An efficient nearest neighbours search algorithm for full-text documents]. Vestnik Sankt-Peterburgskogo universiteta. Ser. 10, 2011, no. 3, pp. 72-84.

2. Kol'chugina E.A., Makar' V.A. Metod kollaborativnoy fil'tratsii dlya masshtabiruemykh rekomendatel'nykh sistem [Method for scalable collaborative filtering recommendation systems]. Sovremennye nauchnye issledovaniya i innovatsii [Modern scientific researches and innovations], 2012, no. 6. Available at: http://web.snauka.ru/issues/2012/06/14316 , accessed

01.10.2013.

3. Vikash Kumar Singh. Role of Search Engine Optimization in Web Technology for Commercialization Rationale. International Journal of Creative Research Thoughts, 2013, vol.

1, no. 2. Available at: http://ijcrt.com/UploadedArticle/12.pdf , accessed 10.2013.

4. Fanizzi N., d’Amato C., Esposito F. Semantic Nearest Neighbor Search in OWL Ontologies. Dipartimento di Informatica, Universit' a degli studi di Bari Campus Universitario,

Italy. Available at: http://ftp.informatik.rwth-aachen.de/Publications/CEUR-WS/Vol-314/38.pdf

, accessed 23.09.2013.

5. Vaca-Castano G., ZamirA.R., Shah M. City Scale Geo-Spatial Trajectory Estimation of a Moving Camera. Computer Vision Lab, University of Central Florida, 2012. Available at: http://www.cs.ucf.edu/~aroshan/index files/CVPR12 Amir.pdf , accessed 23.09.2013.

6. Gusev D.I. Algoritm poiska blizhayshikh sosedey [Nearest neighbour search algorithm]. Programmnyeprodukty i sistemy, 2012, no. 3, pp. 231-234. Available at: http://www.swsys.ru/index.php?page=article&id=3249 , accessed 23.09.2013.

7. Yianilos P.N. Data Structures and Algorithms for Nearest Neighbor Search in General Metric Spaces. Available at: http://www.cs.iastate.edu/~honavar/nndatastructures.pdf , accessed

23.09.2013.

8. Panigrahy R. An Improved Algorithm Finding Nearest Neighbor Using Kd-trees. Microsoft Research, Mountain View CA, USA, 2008. Available at: http://theory.stanford.edu/~rinap/papers/kdtreelatin.pdf , accessed 23.09.2013.

9. Maneewongvatana S., Mount D.M. An Empirical Study of a New Approach to Nearest Neighbor Searching. Department of Computer Science, University of Maryland, Maryland. Available at: http://www.cs.umd.edu/~mount/Papers/alenex01-empir.pdf , accessed 23.09.2013.

10. Jia Pan, Dinesh Manocha. Fast GPU-based Locality Sensitive Hashing for K-Nearest Neighbor Computation. Department of Computer Science, UNC Chapel Hill, 2011. Available at: http://gamma.cs.unc.edu/KNN/gpuknn.pdf , accessed 23.09.2013.

11. Tao Y., Sheng C. Fast Nearest Neighbor Search with Keywords. Available at: http://www.cse.cuhk.edu.hk/~taoyf/paper/tkde13-spakey.pdf , accessed 23.09.2013.

i Надоели баннеры? Вы всегда можете отключить рекламу.