Эта статья может быть слишком технической, чтобы ее могло понять большинство читателей . Март 2019 г. ) ( Узнайте, как и когда удалить этот шаблон сообщения ) ( |
BK-дерево является метрикой дерева предложенного Walter Austin Буркхардом и Роберт М. Келлером [1] , специально адаптированы к дискретным метрическим пространствам . Для простоты рассмотрим целочисленную дискретную метрику . Тогда BK-дерево определяется следующим образом. В качестве корневого узла выбирается произвольный элемент a . У корневого узла может быть ноль или более поддеревьев. К-е поддерево рекурсивно построено из всех элементов Ь такие , что . BK-деревья можно использовать для приблизительного сопоставления строк в словаре. [2] [ нужен пример ]
Пример [ править ]
На этом рисунке изображено BK-дерево для полученного набора слов {"книга", "книги", "торт", "бу", "благо", "повар", "торт", "накидка", "тележка"}. с помощью расстояния Левенштейна
- каждый узел помечен строкой из ;
- каждая дуга помечена где обозначает слово, которому присвоено .
BK-дерево построено так, чтобы:
- для всех узлов BK-дерева веса, присвоенные его выходным дугам, различны;
- для всех дуги , помеченной , каждый потомок из удовлетворяет следующему уравнению: :
- Пример 1: Рассмотрим дугу от «книги» к «книгам». Расстояние между словом "book" и любым словом в {"books", "boo", "boon", "cook"} равно 1;
- Пример 2: Рассмотрим дугу от «книги» до «бу». Расстояние между словом "книги" и любым словом в {"бу", "благо", "повар"} равно 2.
Вставка [ править ]
Примитив вставки используется для заполнения BK-дерева в соответствии с дискретной метрикой .
Вход:
- : БК-дерево;
- обозначает вес, присвоенный дуге ;
- обозначает слово, присвоенное узлу );
- : дискретная метрика, используемая (например, расстояние Левенштейна );
- : элемент, в который нужно вставить ;
Выход:
- Узел, соответствующий
Алгоритм:
- Если пуст:
- Создайте корневой узел в
- Возвращаться
- Установить в корень
- Пока существует:
- Если :
- Возвращаться
- Найдите ребенка такого, что
- Если не найдено:
- Создать узел
- Создайте дугу
- Возвращаться
Поиск [ править ]
Для найденного элемента поисковый примитив просматривает BK-дерево, чтобы найти ближайший элемент . Ключевая идея состоит в том, чтобы ограничить исследование узлами, которые могут улучшить только лучшего кандидата, найденного на данный момент, за счет использования структуры BK-дерева и неравенства треугольника (критерий отсечения).
Вход:
- : БК-дерево;
- : соответствующая дискретная метрика (например, расстояние Левенштейна );
- : искомый элемент;
- : максимально допустимое расстояние между лучшим совпадением и , по умолчанию ;
Выход:
- : элемент, ближайший к хранящемуся, согласно или если не найден;
Алгоритм:
- Если пусто:
- Возвращаться
- Создание набора узлов в процессе, и вставить корень в .
- Пока :
- Извлечь произвольный узел из
- Если :
- Для каждой исходящей дуги :
- Если : (критерий отсечения)
- Вставить в .
- Если : (критерий отсечения)
- Возвращаться
См. Также [ править ]
- Расстояние Левенштейна - метрика расстояния, обычно используемая при построении BK-дерева.
- Расстояние Дамерау – Левенштейна - модифицированная форма расстояния Левенштейна, допускающая транспозиции
Ссылки [ править ]
- ^ В. Буркхард и Р. Келлер. Некоторые подходы к поиску наиболее подходящего файла, CACM, 1973
- ^ Р. Баеза-Йейтс, В. Кунто, У. Манбер и С. Ву. Близкое сопоставление с использованием фиксированных деревьев запросов. В M. Crochemore и D. Gusfield, редакторах, 5th Combinatorial Pattern Matching, LNCS 807, pages 198–212, Asilomar, CA, июнь 1994.
- ^ Рикардо Баеза-Йейтс и Гонсало Наварро. Быстрое приближенное сопоставление строк в словаре. Proc. SPIRE'98
Внешние ссылки [ править ]
- Реализация BK-дерева в Common Lisp с результатами тестирования и графиками производительности.
- Объяснение BK-деревьев и их отношения к метрическим пространствам [3]
- Объяснение BK-Trees с реализацией на C # [4]
- Реализация BK-дерева в Lua [5]
- Реализация BK-дерева в Python [6]