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