М-дерево - M-tree
Эта статья предоставляет недостаточный контекст для тех, кто не знаком с предметом.Июнь 2010 г.) (Узнайте, как и когда удалить этот шаблон сообщения) ( |
М-деревья находятся древовидные структуры данных которые похожи на R-деревья и B-деревья. Он построен с использованием метрика и полагается на неравенство треугольника для эффективного диапазона и k-ближайший сосед (k-NN) запросы. Хотя M-деревья могут хорошо работать во многих условиях, дерево также может иметь большое перекрытие, и нет четкой стратегии, как лучше всего избежать перекрытия. Кроме того, его можно использовать только для функции расстояния которые удовлетворяют неравенству треугольника, в то время как многие расширенные функции различия, используемые в поиск информации не удовлетворите это.[1]
Обзор
Как и в любой структуре данных на основе дерева, M-дерево состоит из узлов и листьев. В каждом узле есть объект данных, который однозначно его идентифицирует, и указатель на поддерево, в котором находятся его дочерние элементы. На каждом листе есть несколько объектов данных. Для каждого узла есть радиус который определяет шар в желаемом метрическом пространстве. Таким образом, каждый узел и лист проживающий в конкретном узле на наибольшем расстоянии из , и каждый узел и лист с родителем узла держитесь от него на расстоянии.
Конструкция M-Tree
Составные части
M-Tree состоит из следующих компонентов и подкомпонентов:
- Нелистовые узлы
- Набор объектов маршрутизации NRO.
- Указатель на родительский объект узла Oп.
- Листовые узлы
- Набор предметов NО.
- Указатель на родительский объект узла Oп.
- Объект маршрутизации
- (Значение функции) объект маршрутизации Oр.
- Радиус покрытия r (Oр).
- Указатель на покрывающее дерево T (Oр).
- Расстояние Oр от своего родительского объекта d (Oр, P (Oр))
- Объект
- (Значение свойства) объект Oj.
- Идентификатор объекта oid (Oj).
- Расстояние Oj от своего родительского объекта d (Oj, P (Oj))
Вставлять
Основная идея - сначала найти листовой узел N где новый объект О принадлежит. Если N не заполнен, просто прикрепите его к N. Если N заполнено, затем вызовите метод для разделения N. Алгоритм следующий:
Алгоритм Вставить ввод: узел N M-Tree MT, Вход Выход: новый экземпляр MT содержащий все записи в оригинале MT плюс
объекты маршрутизации или объекты если N это не лист тогда {/ * Ищите записи, в которые вписывается новый объект * / позволять маршрутизировать объекты из набор объектов маршрутизации такой, что если не пусто тогда {/ * Если есть одна или несколько записей, ищите такую, которая ближе к новому объекту * / } еще {/ * Если такой записи нет, то ищите объект с минимальным расстоянием от * / / * края радиуса покрытия до нового объекта * / / * Обновляем новые радиусы записи * / } / * Продолжаем вставку на следующем уровне * / возвращаться вставлять(); еще {/ * Если узел имеет емкость, просто вставьте новый объект * / если N не полный тогда { хранить() } / * Узел загружен на полную мощность, тогда необходимо сделать новое разбиение на этом уровне * / еще { расколоть() } }
- «←» означает назначение. Например, "самый большой ← элемент"означает, что стоимость самый большой изменяет стоимость элемент.
- "возвращаться"завершает алгоритм и выводит следующее значение.
Расколоть
Если метод разделения достигает корня дерева, он выбирает два объекта маршрутизации из N, и создает два новых узла, содержащих все объекты в исходном N, и сохраните их в новом корне. Если методы разделения доходят до узла N это не корень дерева, метод выбирает два новых объекта маршрутизации из N, перегруппируйте каждый объект маршрутизации в N в двух новых узлах и , и сохраните эти новые узлы в родительском узле оригинального N. Разделение необходимо повторить, если не хватает емкости для хранения . Алгоритм следующий:
Алгоритм Разделение ввода: узел N M-Tree MT, Вход Выход: новый экземпляр MT содержащий новый раздел.
/ * Новые объекты маршрутизации теперь все те, что находятся в узле, плюс новый объект маршрутизации * / пусть будет NN записи если N это не корень тогда {/ * Получить родительский узел и родительский объект маршрутизации * / позволять быть родительским объектом маршрутизации N позволять быть родительским узлом N } / * Этот узел будет содержать часть объектов узла, который будет разделен * / Создаем новый узел N ' / * Перемещение двух объектов маршрутизации из узла, который нужно разделить, в новые объекты маршрутизации * / Создание новых объектов и . Продвигать() / * Выберите, какие объекты из разделяемого узла будут действовать как новые объекты маршрутизации * / Partition () / * Сохранять записи в каждом новом объекте маршрутизации * / Магазин записи в N и записи в N ' если N текущий корень тогда {/ * Создайте новый узел и установите его как новый корень и сохраните новые объекты маршрутизации * / Создайте новый корневой узел Магазин и в } еще {/ * Теперь используйте родительский объект маршрутизации для хранения одного из новых объектов * / Заменить запись с входом в если не полный тогда {/ * Второй объект маршрутизации сохраняется в родительском только в том случае, если у него есть свободная емкость * / Магазин в } еще {/ * Если свободных мест нет, разделите уровень вверх * / расколоть() } }
- «←» означает назначение. Например, "самый большой ← элемент"означает, что стоимость самый большой изменяет стоимость элемент.
- "возвращаться"завершает алгоритм и выводит следующее значение.
Запросы M-Tree
Запрос диапазона
В запросе диапазона указывается минимальное значение сходства / максимального расстояния. Для данного объекта запроса и максимальное расстояние поиска, запрос диапазона классифицировать(Q, r (Q)) выбирает все проиндексированные объекты такой, что .[2]
Алгоритм RangeSearch начинается с корневого узла и рекурсивно просматривает все пути, которые нельзя исключить из ведущих к квалифицируемым объектам.
Алгоритм RangeSearchInput: узел N компании M-Tree MT, Q: объект запроса, : радиус поиска
Вывод: все объекты БД такой, что
{ позволять быть родительский объект узла N; если N не является лист тогда { для каждого Вход() в N делать { если тогда { Вычислить ; если тогда RangeSearch(* птр ()),Q,); } } } еще { для каждого Вход() в N делать { если тогда { Вычислить ; если ≤ тогда Добавить к результату; } } }}
- «←» означает назначение. Например, "самый большой ← элемент"означает, что стоимость самый большой изменяет стоимость элемент.
- "возвращаться"завершает алгоритм и выводит следующее значение.
- - это идентификатор объекта, который находится в отдельном файле данных.
- поддерево - покрывающее дерево
k-NN запросы
Запрос K Nearest Neighbor (k-NN) принимает мощность входного набора в качестве входного параметра. Для заданного объекта запроса Q ∈ D и целого числа k ≥ 1 запрос NN (Q, k) k-NN выбирает k индексированных объектов, которые имеют кратчайшее расстояние от Q в соответствии с функцией расстояния d.[2]
Смотрите также
- Сегментное дерево
- Дерево интервалов - Вырожденное R-дерево для 1 измерения (обычно времени).
- Иерархия ограничивающего объема
- Пространственный индекс
- Суть
Рекомендации
- ^ Чаччиа, Паоло; Пателла, Марко; Зезула, Павел (1997). «M-tree - эффективный метод доступа для поиска сходства в метрических пространствах» (PDF). Материалы 23-й конференции VLDB Афины, Греция, 1997 г.. Исследовательский центр IBM Almaden: Фонд очень больших баз данных, Inc., стр. 426–435. p426. Получено 2010-09-07.
- ^ а б П. Чаччиа; М. Пателла; Ф. Рабитти; П. Зезула. «Индексирование метрических пространств с помощью M-дерева» (PDF). Департамент компьютерных наук и инженерии. Болонский университет. п. 3. Получено 19 ноября 2013.