Понимание алгоритмов хранения местоположения и запросов?

9

Одним из наиболее важных аспектов базы данных, оборудованной ГИС, является то, что она предоставляет пользователю возможность быстро запрашивать все точки в некоторой произвольной географической области, которые соответствуют некоторым дополнительным критериям. (Например, «Найдите мне ближайшие 3 ресторана к этой точке на карте».)

Может ли кто-нибудь указать мне на теоретическое обсуждение алгоритмов? Я хочу узнать, как они работают.

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

Существует ли в настоящее время какое-либо программное обеспечение, которое предоставляет возможность поиска по этим обобщенным пространствам?

Джон Берриман
источник

Ответы:

4

Хорошие описания алгоритмов в 2-х и 3-х измерениях появляются в классическом тексте Preparata & Shamos . Алгоритмы, используемые в ГИС, являются специальностью Ханана Самета , который опубликовал несколько книг на эту тему.

Поиски в многомерном формате обычно облегчаются или ускоряются с помощью методов предварительного анализа данных, кластеризации или уменьшения размеров. Это больше вопрос анализа данных и статистики, а не ГИС, который по своей природе фокусируется на поиске в евклидовом измерении от одного до четырех. Для получения дополнительной информации поищите на нашем родственном форуме stats.stackexchange.com возможные термины, такие как кластеризация , уменьшение размерности и многомерное масштабирование, и менее очевидные, такие как pca (анализ основных компонентов) и svm (машины опорных векторов). Это также хорошее место, чтобы спросить о существующем программном обеспечении.

Whuber
источник
4

Классический (палеогеографический) ответ - использовать дерево KD для хранения данных (см. Http://en.wikipedia.org/wiki/Kd-tree ). Они работают, примерно вдвое сокращая данные до двух разделов в каждом измерении по очереди при перемещении по дереву. Преимущество их состоит в том, что, когда вы находите ближайший товар, вы также можете создать список ближайших товаров, если вы идете без дополнительных затрат, поэтому ответить на вопрос, какие три ближайших ресторана так же просто, как найти ближайший.

Я где-то читал, что eHarmony использует KD-деревья для поиска «совместимых совпадений» в 14 измерениях.

Ян Тертон
источник
+1 Краткое четкое описание эффективного метода поиска сделано хорошо.
whuber
2

Я слышал, что Netezza реализовал несколько инновационных алгоритмов пространственной параллельной обработки. Официальный документ здесь .

Архитектура асимметричной массивно-параллельной обработки Netezza обеспечивает наилучшее сочетание симметричной многопроцессорной обработки (SMP) и массивно-параллельной обработки (MPP), облегчая теразвездную, сложную обработку запросов как пространственных, так и непространственных данных без сложности, настройки и агрегирования, необходимых в традиционных системах.

Обновить

Я забыл упомянуть, что Netezza активно использует теорему Байеса . Вот коллекция видео здесь .

Кирк Куйкендалл
источник