Время происка ближайшего объекта в таблице

MapInfo, MapBasic
Ответить
victor_v_k
Новоприбывший
Сообщения: 10
Зарегистрирован: 24 ноя 2009, 16:46
Репутация: 0

Время происка ближайшего объекта в таблице

Сообщение victor_v_k » 25 ноя 2009, 15:10

Решается задача поиска ближайшего объекта (точки) в таблице MapInfo к указанным координатам. Доступ к таблице осуществляется через библиотеку MapXtreme. Есть несколько таблиц. Для таблицы в которой 38 тыс. записей поиск выполняется менее одной секунды, это приемлемый результат. Для таблицы в которой 67 тыс. записей запрос выполняется более 5 секунд, это очень много. Неужели при увеличении количества записей так замедляется выполнение запроса? Или выполнение запроса зависит от каких-либо параметров таблицы? Может быть колонка геометрии как-то индексируется? Спасибо.

Boris
Гуру
Сообщения: 4205
Зарегистрирован: 10 апр 2006, 22:34
Репутация: 433
Откуда: Париж

Re: Время происка ближайшего объекта в таблице

Сообщение Boris » 26 ноя 2009, 02:00

Задача поиска ближайшего соседа - есть задача n*p перебора, где n и p размерности сопрягаемых таблиц. Для точек - она линейна от функции сравнения. Для геометрических фигур - нет, т.к. включает еще перебор всех вершин. Хотя тут уже существуют некоторые алгоритмы оптимизации.
Если 37 тыс = 1 сек, то 68 будет в 68/37*68/37 = 3.38 раз дольше. Если результат отличается сильнее, значит начинает сказываться обращение к памяти.
---
В общем случае, для задач такого рода стандартным является использование алгоритма предрасчета. Правило - считаешь 1 раз (сколько угодно долго), пользуешься - часто. В дальнейшем производится перерасчет только для добавляемых - изменяемых точек, плюс некоторое их разумное окружение. На пример, удесятерённое кратчайшее расстояние.

victor_v_k
Новоприбывший
Сообщения: 10
Зарегистрирован: 24 ноя 2009, 16:46
Репутация: 0

Re: Время происка ближайшего объекта в таблице

Сообщение victor_v_k » 26 ноя 2009, 10:29

Как выполняется расчет, понятно, спасибо. Может быть, по опыту работы, можете сказать 5 секунд на 67 точках это долго или это нормальное время? Нужно искать стандартные средства для уменьшения времени или лучше думать над алгоритмом предрасчета?

Ответить

Вернуться в «MapInfo»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 15 гостей