Эффективный алгоритм для работы с файлами сети больших данных для вычисления n ближайших узлов

Проблема:
У меня есть два сетевых файла (скажем, NET1 и NET2) — у каждого есть набор узлов с уникальным идентификатором для каждого узла и географическими координатами X и Y. Каждый узел в NET2 должен иметь N подключения к NET1 и идентификатор N узлы будут определяться минимальным расстоянием по прямой. Вывод будет иметь три идентификатора поля узла в NET1, NET2 и расстояние между ними. Все файлы в формате табуляции с разделителями.

Один путь вперед
Один из способов реализовать это для каждого узла в NET2, мы перебираем каждый узел в NET1 и вычисляем все комбинации расстояний NET1-NET2. Сортируйте его по идентификатору узла NET2 и по расстоянию и запишите первые четыре записи для каждого узла. Но проблема в том, что в NET1 2000 узлов почти 2 миллиона, в NET2 — это 4 миллиарда расстояний, которые нужно рассчитать и записать в первом шаге этого алгоритма … и время выполнения довольно запретное!

Запрос:
Мне было любопытно, сталкивался ли кто-нибудь из вас с подобной проблемой. Я хотел бы услышать от вас все о любых алгоритмах и структурах данных, которые можно использовать для ускорения обработки. Я знаю, что сфера охвата этого вопроса очень широка, но я надеюсь, что кто-то может указать мне правильный путь, поскольку у меня очень ограниченный опыт оптимизации кодов для данных такого масштаба.

Языки:
Я пытаюсь в C ++, Python и R.

Пожалуйста, не стесняйтесь идей! Помощь высоко ценится!

2

Решение

кД-дерево это один из вариантов. Это позволяет вам найти ближайшего соседа (или набор ближайших соседей) в разумные сроки. Конечно, вы должны построить дерево в начале, и это займет некоторое время. Но в целом, kd-tree подходит, если вам не нужно добавлять / удалять узлы во время выполнения, что, как вам кажется. Он также имеет лучшую производительность с меньшим размером (в вашем случае размер равен 2).

Другая возможная структура данных октодерева (квадрантов для 2D), это более простая структура данных (довольно легко реализуемая), но kd-tree может быть более эффективным.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector