М-дерево

редактировать

M-деревья - это древовидные структуры данных, похожие на R-деревья и B-деревья. Он построен с использованием метрики и основывается на неравенстве треугольника для запросов эффективного диапазона и k-ближайшего соседа (k-NN). Хотя M-деревья могут хорошо работать во многих условиях, дерево также может иметь большое перекрытие, и нет четкой стратегии, как лучше всего избежать перекрытия. Кроме того, его можно использовать только для функций расстояния, которые удовлетворяют неравенству треугольника, в то время как многие расширенные функции различия, используемые при поиске информации, этому не удовлетворяют.

СОДЕРЖАНИЕ
  • 1 Обзор
  • 2 Конструкция M-Tree
    • 2.1 Компоненты
    • 2.2 Вставить
    • 2.3 Сплит
  • 3 запроса M-Tree
    • 3.1 Запрос диапазона
    • 3.2 k-NN запросов
  • 4 См. Также
  • 5 ссылки
Обзор
2D M-Tree, визуализированное с помощью ELKI. Каждая синяя сфера (лист) содержится в красной сфере (узлы каталога). Листья перекрывают друг друга, но не слишком сильно; здесь узлы каталогов перекрываются гораздо больше.

Как и любая древовидная структура данных, M-Tree состоит из узлов и листьев. В каждом узле есть объект данных, который однозначно его идентифицирует, и указатель на поддерево, в котором находятся его дочерние элементы. На каждом листе есть несколько объектов данных. Для каждого узла есть радиус, определяющий шар в желаемом метрическом пространстве. Таким образом, каждый узел и лист, находящиеся в конкретном узле, находятся на максимальном расстоянии от него, и каждый узел и лист с родительским узлом сохраняют расстояние от него. р {\ displaystyle r} п {\ displaystyle n} л {\ displaystyle l} N {\ displaystyle N} р {\ displaystyle r} N {\ displaystyle N} п {\ displaystyle n} л {\ displaystyle l} N {\ displaystyle N}

Конструкция M-Tree

Составные части

M-Tree состоит из следующих компонентов и подкомпонентов:

  1. Нелистовые узлы
    1. Набор объектов маршрутизации N RO.
    2. Указатель на родительский объект узла O стр.
  2. Листовые узлы
    1. Набор объектов N O.
    2. Указатель на родительский объект узла O стр.
  3. Объект маршрутизации
    1. (Значение функции) объект маршрутизации O r.
    2. Радиус покрытия r (O r).
    3. Указатель на покрывающее дерево T (O r).
    4. Расстояние O r от его родительского объекта d (O r, P (O r))
  4. Объект
    1. (Значение свойства) объекта O j.
    2. Идентификатор объекта oid (O j).
    3. Расстояние O j от его родительского объекта d (O j, P (O j))

Вставлять

Основная идея заключается в первую найти лист узел N, где новый объект O принадлежит. Если N не является полным, то просто прикрепить его к N. Если N полон затем вызвать метод для разделения N. Алгоритм следующий:

Algorithm Insert Input: Node N of M-Tree MT, Entry      O  n {\displaystyle O_{n}} Output: A new instance of MT containing all entries in original MT plus      O  n {\displaystyle O_{n}}
      N  e  N {\displaystyle N_{e}\gets N}'s routing objects or objects if N is not a leaf then { /* Look for entries that the new object fits into */ let      N  i n {\displaystyle N_{in}} be routing objects from      N  e {\displaystyle N_{e}}'s set of routing objects      N  R O {\displaystyle N_{RO}} such that     d (  O  r ,  O  n )  r (  O  r ) {\displaystyle d(O_{r},O_{n})\leq r(O_{r})} if      N  i n {\displaystyle N_{in}} is not empty then { /* If there are one or more entry, then look for an entry such that is closer to the new object */      O  r     min   O  r   N  i n d (  O  r ,  O  n ) {\displaystyle O_{r}^{*}\gets \min _{O_{r}\in N_{in}}d(O_{r},O_{n})} } 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 */      O  r     min   O  r   N  i n d (  O  r ,  O  n )  r (  O  r ) {\displaystyle O_{r}^{*}\gets \min _{O_{r}\in N_{in}}d(O_{r},O_{n})-r(O_{r})} /* Upgrade the new radii of the entry */     r (  O  r   )  d (  O  r   ,  O  n ) {\displaystyle r(O_{r}^{*})\gets d(O_{r}^{*},O_{n})} } /* Continue inserting in the next level */ return insert(    T (  O  r   ) ,  O  n {\displaystyle T(O_{r}^{*}),O_{n}}); else { /* If the node has capacity then just insert the new object */ if N is not full then { store(    N ,  O  n {\displaystyle N,O_{n}}) } /* The node is at full capacity, then it is needed to do a new split in this level */ else { split(    N ,  O  n {\displaystyle N,O_{n}}) } }
  • «←» обозначает присвоение. Например, « самый большой ← элемент » означает, что значение самого большого элемента изменяется на значение элемента.
  • « return » завершает алгоритм и выводит следующее значение.

Расколоть

Если метод разделения достигает корня дерева, он выбирает два объекта маршрутизации из N и создает два новых узла, содержащих все объекты в исходном N, и сохраняет их в новом корне. Если методы сплит поступает к узлу N, который не является корнем дерева, метод выбора двух новых объектов маршрутизации из N, повторно организовать каждый маршрутизации объекта в N в двух новых узлов и, и хранить эти новые узлы родительского узла оригинального N. Разделение необходимо повторить, если не хватает емкости для хранения. Алгоритм следующий: N 1 {\ displaystyle N_ {1}} N 2 {\ displaystyle N_ {2}} N п {\ displaystyle N_ {p}} N п {\ displaystyle N_ {p}} N 2 {\ displaystyle N_ {2}}

Algorithm Split Input: Node N of M-Tree MT, Entry      O  n {\displaystyle O_{n}} 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     N  O {\displaystyle N\cup O} if N is not the root then { /*Get the parent node and the parent routing object*/ let      O  p {\displaystyle O_{p}} be the parent routing object of N let      N  p {\displaystyle N_{p}} 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      O  p 1 {\displaystyle O_{p1}} and      O  p 2 {\displaystyle O_{p2}}. Promote(    N ,  O  p 1 ,  O  p 2 {\displaystyle N,O_{p1},O_{p2}}) /* Choose which objects from the node being split will act as new routing objects */ Partition(    N ,  O  p 1 ,  O  p 2 ,  N  1 ,  N  2 {\displaystyle N,O_{p1},O_{p2},N_{1},N_{2}}) /* Store entries in each new routing object */ Store      N  1 {\displaystyle N_{1}}'s entries in N and      N  2 {\displaystyle N_{2}}'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      N  p {\displaystyle N_{p}} Store      O  p 1 {\displaystyle O_{p1}} and      O  p 2 {\displaystyle O_{p2}} in      N  p {\displaystyle N_{p}} } else { /* Now use the parent routing object to store one of the new objects */ Replace entry      O  p {\displaystyle O_{p}} with entry      O  p 1 {\displaystyle O_{p1}} in      N  p {\displaystyle N_{p}} if      N  p {\displaystyle N_{p}} is no full then { /* The second routing object is stored in the parent only if it has free capacity */ Store      O  p 2 {\displaystyle O_{p2}} in      N  p {\displaystyle N_{p}} } else { /*If there is no free capacity then split the level up*/ split(     N  p ,  O  p 2 {\displaystyle N_{p},O_{p2}}) } }
  • «←» обозначает присвоение. Например, « самый большой ← элемент » означает, что значение самого большого элемента изменяется на значение элемента.
  • « return » завершает алгоритм и выводит следующее значение.
Запросы M-Tree

Запрос диапазона

В запросе диапазона указывается минимальное значение сходства / максимального расстояния. Для данного объекта запроса и максимального расстояния поиска диапазон запроса range (Q, r (Q)) выбирает все проиндексированные объекты таким образом, что. Q D {\ displaystyle Q \ in D} р ( Q ) {\ Displaystyle г (Q)} О j {\ displaystyle O_ {j}} d ( О j , Q ) р ( Q ) {\ displaystyle d (O_ {j}, Q) \ leq r (Q)}

Алгоритм RangeSearch начинается с корневого узла и рекурсивно просматривает все пути, которые не могут быть исключены из ведущих к квалифицируемым объектам.

Algorithm RangeSearch Input: Node N of M-Tree MT, Q: query object,     r ( Q ) {\displaystyle r(Q)}: search radius
Output: all the DB objects such that     d ( O j , Q )  r ( Q ) {\displaystyle d(Oj,Q)\leq r(Q)}
{ let      O  p {\displaystyle O_{p}} be the parent object of node N; if N is not a leaf then { for each entry(     O  r {\displaystyle O_{r}}) in N do { if      | d (  O  p , Q )  d (  O  r ,  O  p )  |  r ( Q ) + r (  O  r ) {\displaystyle |d(O_{p},Q)-d(O_{r},O_{p})|\leq r(Q)+r(O_{r})} then { Compute     d (  O  r , Q ) {\displaystyle d(O_{r},Q)}; if     d (  O  r , Q )  r ( Q ) + r (  O  r ) {\displaystyle d(O_{r},Q)\leq r(Q)+r(O_{r})} then RangeSearch(*ptr(    T (  O  r {\displaystyle T(O_{r}})),Q,    r ( Q ) {\displaystyle r(Q)}); } } } else { for each entry(     O  j {\displaystyle O_{j}}) in N do { if      | d (  O  p , Q )  d (  O  j ,  O  p )  |  r ( Q ) {\displaystyle |d(O_{p},Q)-d(O_{j},O_{p})|\leq r(Q)} then { Compute     d (  O  j , Q ) {\displaystyle d(O_{j},Q)}; if     d (  O  j , Q ) {\displaystyle d(O_{j},Q)}    r ( Q ) {\displaystyle r(Q)} then add     o i d (  O  j ) {\displaystyle oid(O_{j})} to the result; } } } }
  • «←» обозначает присвоение. Например, « самый большой ← элемент » означает, что значение самого большого элемента изменяется на значение элемента.
  • « return » завершает алгоритм и выводит следующее значение.
  • о я d ( О j ) {\ displaystyle oid (O_ {j})} это идентификатор объекта, который находится в отдельном файле данных.
  • Т ( О р ) {\ displaystyle T (O_ {r})} поддерево - покрывающее дерево О р {\ displaystyle O_ {r}}

k-NN запросы

Запрос K Nearest Neighbor (k-NN) принимает мощность входного набора в качестве входного параметра. Для заданного объекта запроса Q ∈ D и целого числа k ≥ 1 запрос NN (Q, k) k-NN выбирает k индексированных объектов, которые находятся на кратчайшем расстоянии от Q в соответствии с функцией расстояния d.

Смотрите также
Рекомендации
Последняя правка сделана 2023-12-31 10:12:40
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте