Из Википедии, свободной энциклопедии
Перейти к навигации Перейти к поиску

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

Обзор [ править ]

2D M-Tree, визуализированное с помощью ELKI . Из-за масштабов осей сферы выглядят эллипсоидальными. Каждая синяя сфера (лист) содержится в красной сфере (узлы каталога). Листья перекрывают друг друга, но не слишком сильно.

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

Конструкция 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 . Алгоритм следующий:

Вставка алгоритма Вход: Узел 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]

См. Также [ править ]

Ссылки [ править ]

  1. ^ Чаччиа, Паоло; Пателла, Марко; Зезула, Павел (1997). «M-tree - эффективный метод доступа для поиска сходства в метрических пространствах» (PDF) . Материалы 23-й конференции VLDB Афины, Греция, 1997 . Исследовательский центр IBM Almaden: Фонд очень больших баз данных, Inc., стр. 426–435. p426 . Проверено 7 сентября 2010 .
  2. ^ а б П. Чачча; М. Пателла; Ф. Рабитти; П. Зезула. «Индексирование метрических пространств с помощью M-дерева» (PDF) . Департамент компьютерных наук и инженерии . Болонский университет. п. 3 . Проверено 19 ноября 2013 года .