Проблема: у меня есть два сетевых файла (скажем, NET1 и NET2) - каждый имеет набор узлов с уникальным идентификатором для каждого узла и географическими координатами X и Y. Каждый узел в NET2 должен иметь < em> n подключений к NET1 и ID n узлов будут определяться минимальным расстоянием по прямой линии. Выходные данные будут иметь три поля идентификатора узла в NET1, NET2 и расстояние между ними. Все файлы имеют формат с разделителями табуляции.
Один путь вперед… Один из способов реализовать это - для каждого узла в NET2 мы перебираем каждый узел в NET1 и вычисляем все комбинации расстояний NET1-NET2. Отсортируйте его по идентификатору узла NET2 и расстоянию и выпишите первые четыре записи для каждого узла. Но проблема в том, что около 2 миллионов узлов в NET1, 2000 узлов в NET2 - это 4 миллиарда расстояний, которые нужно вычислить и записать на первом шаге этого алгоритма ... и время выполнения совершенно недопустимо!
Запрос. Мне было любопытно, сталкивался ли кто-нибудь из вас с подобной проблемой. Я хотел бы услышать от вас обо всех алгоритмах и структурах данных, которые можно использовать для ускорения обработки. Я знаю, что объем этого вопроса очень широк, но я надеюсь, что кто-то сможет указать мне правильный путь, поскольку у меня очень ограниченный опыт оптимизации кодов для данных такого масштаба.
Языки: я пытаюсь использовать C ++, Python и R.
Пожалуйста, поделитесь идеями! Помощь очень признательна!