М-дерево
Эта статья может быть слишком технической для понимания большинства читателей . ( Октябрь 2021 г. ) |
В информатике , М-деревья — это древовидные структуры данных похожие на R-деревья и B-деревья . Он построен с использованием метрики и основан на неравенстве треугольника для запросов эффективного диапазона и k-ближайшего соседа (k-NN).Хотя M-деревья могут хорошо работать во многих условиях, дерево также может иметь большое перекрытие, и не существует четкой стратегии, как лучше всего избежать перекрытия. Кроме того, его можно использовать только для функций расстояния , которые удовлетворяют неравенству треугольника, в то время как многие расширенные функции несходства, используемые при поиске информации, этому не удовлетворяют. [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. разделения Алгоритм следующий:
Алгоритм Вставка Вход: Узел N M-Tree MT , запись Вывод: новый экземпляр MT, содержащий все записи исходного MT плюс
объекты маршрутизации или объекты если N не лист , то { /* Ищем записи, в которые помещается новый объект */ позволять маршрутизировать объекты из 's набор объектов маршрутизации такой, что если не пусто тогда { /* Если есть одна или несколько записей, ищем запись, которая находится ближе к новому объекту */ } еще { /* Если таких записей нет, то ищем объект на минимальном расстоянии от */ /* граница его радиуса покрытия до нового объекта */ /* Обновляем новые радиусы входа */ } /* Продолжаем вставку на следующем уровне */ вернуть вставку( ); еще { /* Если у узла есть емкость, просто вставьте новый объект */ если N не заполнено, то { магазин( ) } /* Узел загружен на полную мощность, значит необходимо сделать новое разделение на этом уровне */ еще { расколоть( ) } }
- « ←» означает присвоение . Например, « самый большой ← элемент » означает, что значение самого большого изменяется на значение элемента .
- « return » завершает алгоритм и выводит следующее значение.
Сплит [ править ]
Если метод разделения достигает корня дерева, он выбирает два объекта маршрутизации из N и создает два новых узла, содержащие все объекты из исходного N , и сохраняет их в новом корне. Если методы разделения достигают узла N, который не является корнем дерева, метод выбирает два новых объекта маршрутизации из N , переупорядочивает каждый объект маршрутизации в N в двух новых узлах. и и сохраните эти новые узлы в родительском узле оригинального Н. Разделение необходимо повторить, если не имеет достаточной емкости для хранения . Алгоритм следующий:
Алгоритм Сплит Вход: Узел N M-Tree MT , запись Вывод: новый экземпляр MT , содержащий новый раздел.
/* Новые объекты маршрутизации теперь представляют собой все те, что находятся в узле, плюс новый объект маршрутизации */ пусть это будут NN записи если N не является корнем , то { /*Получаем родительский узел и родительский объект маршрутизации*/ позволять быть родительским объектом маршрутизации N, пусть быть родительским узлом N } /* Этот узел будет содержать часть объектов узла, который нужно разделить */ Создайте новый узел N' /* Делаем два объекта маршрутизации из узла, который нужно разделить, новыми объектами маршрутизации */ Создавайте новые объекты и . Продвигать( ) /* Выбираем, какие объекты из разделяемого узла будут действовать как новые объекты маршрутизации */ Раздел( ) /* Сохраняем записи в каждом новом объекте маршрутизации */ Магазин записи в N и ' записи в N' , если N является текущим корнем , то { /* Создайте новый узел, установите его как новый корень и сохраните новые объекты маршрутизации */ Создайте новый корневой узел Магазин и в } еще { /* Теперь используем родительский объект маршрутизации для хранения одного из новых объектов */ Заменить запись с записью в если не полный тогда { /* Второй объект маршрутизации сохраняется в родительском объекте, только если у него есть свободная емкость */ Магазин в } еще { /*Если свободной емкости нет, разделите уровень вверх*/ расколоть( ) } }
- « ←» означает присвоение . Например, « самый большой ← элемент » означает, что значение самого большого изменяется на значение элемента .
- « return » завершает алгоритм и выводит следующее значение.
Запросы M-дерева [ править ]
Запрос диапазона [ править ]
В запросе диапазона указывается минимальное значение сходства/максимального расстояния. Для данного объекта запроса и максимальное расстояние поиска запроса диапазона , диапазон (Q, r(Q)) выбирает все индексированные объекты такой, что . [2]
Алгоритм RangeSearch начинается с корневого узла и рекурсивно обходит все пути, которые нельзя исключить из числа ведущих к подходящим объектам.
Алгоритм поиска диапазонаВходные данные: Узел N M-Tree MT, Q : объект запроса, : радиус поиска
Вывод: все объекты БД такие, что
{ позволять быть родительским объектом узла N ; если N не является листом , то { за каждую запись ( ) в N сделать { если затем { Вычислить ; если затем RangeSearch (*ptr( )) Q , ); } } } еще { за каждую запись ( ) в N сделать { если затем { Вычислить ; если ≤ затем добавь к результату; } } }}
- « ←» означает присвоение . Например, « самый большой ← элемент » означает, что значение самого большого изменяется на значение элемента .
- « 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 г.
- ^ Jump up to: Перейти обратно: а б П. Чачча; М. Пателла; Ф. Рабитти; П. Зезула. «Индексирование метрических пространств с помощью M-дерева» (PDF) . Департамент компьютерных наук и инженерии . Болонский университет. п. 3 . Проверено 19 ноября 2013 г.