Страница 1 из 1
Время происка ближайшего объекта в таблице
Добавлено: 25 ноя 2009, 15:10
victor_v_k
Решается задача поиска ближайшего объекта (точки) в таблице MapInfo к указанным координатам. Доступ к таблице осуществляется через библиотеку MapXtreme. Есть несколько таблиц. Для таблицы в которой 38 тыс. записей поиск выполняется менее одной секунды, это приемлемый результат. Для таблицы в которой 67 тыс. записей запрос выполняется более 5 секунд, это очень много. Неужели при увеличении количества записей так замедляется выполнение запроса? Или выполнение запроса зависит от каких-либо параметров таблицы? Может быть колонка геометрии как-то индексируется? Спасибо.
Re: Время происка ближайшего объекта в таблице
Добавлено: 26 ноя 2009, 02:00
Boris
Задача поиска ближайшего соседа - есть задача n*p перебора, где n и p размерности сопрягаемых таблиц. Для точек - она линейна от функции сравнения. Для геометрических фигур - нет, т.к. включает еще перебор всех вершин. Хотя тут уже существуют некоторые алгоритмы оптимизации.
Если 37 тыс = 1 сек, то 68 будет в 68/37*68/37 = 3.38 раз дольше. Если результат отличается сильнее, значит начинает сказываться обращение к памяти.
---
В общем случае, для задач такого рода стандартным является использование алгоритма предрасчета. Правило - считаешь 1 раз (сколько угодно долго), пользуешься - часто. В дальнейшем производится перерасчет только для добавляемых - изменяемых точек, плюс некоторое их разумное окружение. На пример, удесятерённое кратчайшее расстояние.
Re: Время происка ближайшего объекта в таблице
Добавлено: 26 ноя 2009, 10:29
victor_v_k
Как выполняется расчет, понятно, спасибо. Может быть, по опыту работы, можете сказать 5 секунд на 67 точках это долго или это нормальное время? Нужно искать стандартные средства для уменьшения времени или лучше думать над алгоритмом предрасчета?