М-дерево
Эта статья может быть слишком технической для понимания большинства читателей . ( Октябрь 2021 г. ) |
В информатике , М-деревья — это древовидные структуры данных похожие на R-деревья и B-деревья . Он построен с использованием метрики и основан на неравенстве треугольника для запросов эффективного диапазона и k-ближайшего соседа (k-NN). Хотя М-деревья могут хорошо работать во многих условиях, дерево также может иметь большое перекрытие, и не существует четкой стратегии, как лучше всего избежать перекрытия. Кроме того, его можно использовать только для функций расстояния , которые удовлетворяют неравенству треугольника, в то время как многие расширенные функции несходства, используемые при поиске информации, этому не удовлетворяют. [1]
Обзор [ править ]
Как и любая древовидная структура данных, М-дерево состоит из узлов и листьев. В каждом узле есть объект данных, который однозначно идентифицирует его, и указатель на поддерево, в котором находятся его дочерние элементы. Каждый лист имеет несколько объектов данных. Для каждого узла существует радиус который определяет шар в желаемом метрическом пространстве. Таким образом, каждый узел и лист находящийся в определенном узле находится на максимальном расстоянии от , и каждый узел и лист с родителем узла держитесь от него на расстоянии.
Построение М-дерева [ править ]
Компоненты [ править ]
М-дерево состоит из следующих компонентов и подкомпонентов:
- Нелистовые узлы
- Набор объектов маршрутизации N RO .
- Указатель на родительский объект Node Op .
- Листовые узлы
- Набор объектов N O .
- Указатель на родительский объект Node Op .
- Объект маршрутизации
- (Значение функции) объекта маршрутизации Или r .
- Радиус покрытия r(O r ).
- Указатель на покрывающее дерево T(O r ).
- Расстояние Or от родительского объекта 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. разделения Алгоритм следующий:
Algorithm Insert Input: Node N of M-Tree MT, Entry Output: A new instance of MT containing all entries in original MT plus
's routing objects or objects if N is not a leaf then { /* Look for entries that the new object fits into */ let be routing objects from 's set of routing objects such that if is not empty then { /* If there are one or more entry, then look for an entry such that is closer to the new object */ } else { /* If there are no such entry, then look for an object with minimal distance from */ /* its covering radius's edge to the new object */ /* Upgrade the new radii of the entry */ } /* Continue inserting in the next level */ return insert(); else { /* If the node has capacity then just insert the new object */ if N is not full then { store() } /* The node is at full capacity, then it is needed to do a new split in this level */ else { split() } }
- « ←» означает присвоение . Например, « самый большой ← элемент » означает, что значение самого большого изменяется на значение элемента .
- « return » завершает алгоритм и выводит следующее значение.
Сплит [ править ]
Если метод разделения достигает корня дерева, он выбирает два объекта маршрутизации из N и создает два новых узла, содержащие все объекты из исходного N , и сохраняет их в новом корне. Если методы разделения достигают узла N, который не является корнем дерева, метод выбирает два новых объекта маршрутизации из N , переупорядочивает каждый объект маршрутизации в N в двух новых узлах. и и сохраните эти новые узлы в родительском узле оригинального Н. Разделение необходимо повторить, если не имеет достаточной емкости для хранения . Алгоритм следующий:
Algorithm Split Input: Node N of M-Tree MT, Entry Output: A new instance of MT containing a new partition.
/* The new routing objects are now all those in the node plus the new routing object */ let be NN entries of if N is not the root then { /*Get the parent node and the parent routing object*/ let be the parent routing object of N let be the parent node of N } /* This node will contain part of the objects of the node to be split */ Create a new node N' /* Promote two routing objects from the node to be split, to be new routing objects */ Create new objects and . Promote() /* Choose which objects from the node being split will act as new routing objects */ Partition() /* Store entries in each new routing object */ Store 's entries in N and 's entries in N' if N is the current root then { /* Create a new node and set it as new root and store the new routing objects */ Create a new root node Store and in } else { /* Now use the parent routing object to store one of the new objects */ Replace entry with entry in if is no full then { /* The second routing object is stored in the parent only if it has free capacity */ Store in } else { /*If there is no free capacity then split the level up*/ split() } }
- « ←» означает присвоение . Например, « самый большой ← элемент » означает, что значение самого большого изменяется на значение элемента .
- « return » завершает алгоритм и выводит следующее значение.
Запросы M-дерева [ править ]
Запрос диапазона [ править ]
В запросе диапазона указывается минимальное значение сходства/максимального расстояния. Для данного объекта запроса и максимальное расстояние поиска запроса диапазона , диапазон (Q, r(Q)) выбирает все индексированные объекты такой, что . [2]
Алгоритм RangeSearch начинается с корневого узла и рекурсивно обходит все пути, которые нельзя исключить из числа ведущих к подходящим объектам.
Algorithm RangeSearch Input: Node N of M-Tree MT, Q: query object, : search radius
Output: all the DB objects such that
{ let be the parent object of node N; if N is not a leaf then { for each entry() in N do { if then { Compute ; if then RangeSearch(*ptr()),Q,); } } } else { for each entry() in N do { if then { Compute ; if ≤ then add to the result; } } } }
- « ←» означает присвоение . Например, « самый большой ← элемент » означает, что значение самого большого изменяется на значение элемента .
- « return » завершает алгоритм и выводит следующее значение.
- — идентификатор объекта, который находится в отдельном файле данных.
- является поддеревом – покрывающим деревом
k -NN запросы [ править ]
Запрос k -ближайшего соседа ( k -NN) принимает мощность входного набора в качестве входного параметра. Для данного объекта запроса Q ∈ D и целое число k ≥ 1, запрос k -NN NN(Q, k) выбирает k индексированных объектов, которые имеют кратчайшее расстояние от Q в соответствии с функцией расстояния d. [2]
См. также [ править ]
- Дерево сегментов
- Дерево интервалов — вырожденное R-дерево для одного измерения (обычно времени).
- Иерархия ограничивающих объемов
- Пространственный индекс
- Суть
- Покровное дерево
Ссылки [ править ]
- ^ Чачча, Паоло; Пателла, Марко; Зезула, Павел (1997). «М-дерево: эффективный метод доступа для поиска по сходству в метрических пространствах» (PDF) . Материалы 23-й конференции VLDB, Афины, Греция, 1997 г. Исследовательский центр IBM в Альмадене: Very Large Databases Endowment Inc., стр. 426–435. р426 . Проверено 7 сентября 2010 г.
- ↑ Перейти обратно: Перейти обратно: а б П. Чачча; М. Пателла; Ф. Рабитти; П. Зезула. «Индексирование метрических пространств с помощью M-дерева» (PDF) . Департамент компьютерных наук и инженерии . Болонский университет. п. 3 . Проверено 19 ноября 2013 г.