БК-дерево
Эта статья может быть слишком технической для понимания большинства читателей . ( Март 2019 г. ) |
BK -дерево — это метрическое дерево, предложенное Уолтером Остином Буркхардом и Робертом М. Келлером. [1] специально адаптирован к дискретным метрическим пространствам .Для простоты рассмотрим целочисленную дискретную метрику . Тогда BK-дерево определяется следующим образом. произвольный элемент a В качестве корневого узла выбирается . Корневой узел может иметь ноль или более поддеревьев. k -е поддерево рекурсивно строится из всех элементов b таких, что . BK-деревья можно использовать для приблизительного сопоставления строк в словаре. [2] [ нужен пример ]
Пример
[ редактировать ]На этой картинке изображено БК-дерево для набора. слов {"книга", "книги", "торт", "бу", "благо", "повар", "торт", "накидка", "телега"}, полученных с помощью расстояния Левенштейна
- каждый узел помечается строкой ;
- каждая дуга помечен где обозначает слово, присвоенное .
БК-дерево строится так, что:
- для всех узлов в BK-дереве веса, присвоенные его выходным дугам, различны;
- для всех дуг помечены , каждый потомок из удовлетворяет следующему уравнению: :
- Пример 1. Рассмотрим дугу от «книги» к «книгам». Расстояние между словом "книга" и любым словом в {"books", "boo", "boon", "cook"} равно 1;
- Пример 2. Рассмотрим дугу от «книг» до «бу». Расстояние между словом «books» и любым словом в { «boo», «boon», «cook»} равно 2.
Вставка
[ редактировать ]Примитив вставки используется для заполнения BK-дерева. по дискретной метрике .
Вход:
- : БК-дерево;
- обозначает вес, присвоенный дуге ;
- обозначает слово, присвоенное узлу );
- : дискретная метрика, используемая (например, расстояние Левенштейна );
- : элемент, в который нужно вставить ;
Выход:
- Узел соответствующий
Алгоритм:
- Если пусто:
- Создать корневой узел в
- Возвращаться
- Набор в корень
- Пока существует:
- Если :
- Возвращаться
- Находить ребенок такой, что
- Если не найден:
- Создайте узел
- Создайте дугу
- Возвращаться
Искать
[ редактировать ]Учитывая искомый элемент , примитив поиска обходит BK-дерево, чтобы найти ближайший элемент . Основная идея – ограничить исследование к узлам, которые могут улучшить только лучшего кандидата, найденного на данный момент, используя преимущества организации BK-дерева и неравенства треугольника (критерий отсечения).
Вход:
- : БК-дерево;
- : соответствующая дискретная метрика (например, расстояние Левенштейна );
- : искомый элемент;
- : максимально допустимое расстояние между лучшим совпадением и , по умолчанию ;
Выход:
- : ближайший элемент к хранится в и согласно или если не найден;
Алгоритм:
- Если пусто:
- Возвращаться
- Создавать набор узлов для обработки и вставьте корень в .
- Пока :
- Вытолкнуть произвольный узел от
- Если :
- Для каждой выходной дуги :
- Если : (критерий отсечения)
- Вставлять в .
- Если : (критерий отсечения)
- Возвращаться
Пример алгоритма поиска
[ редактировать ]Рассмотрим пример 8-узлового дерева BK, показанный выше, и установите "прохладный". инициализируется как содержащий корень дерева, который впоследствии извлекается как первое значение с = «книга». Дальше так как расстояние от «книги» до «круто» равно 2, а поскольку это лучшее (то есть наименьшее) расстояние, найденное на данный момент. Далее поочередно рассматривается каждая исходящая от корня дуга: дуга от «книги» к «книгам» имеет вес 1, и так как меньше, чем , узел, содержащий «книги», вставляется в для дальнейшей обработки. Следующая дуга, от «книги» до «торта», имеет вес 4, и поскольку не меньше, чем , узел, содержащий "торт", не вставляется в . Таким образом, поддерево с корнем «торт» будет исключено из поиска, поскольку слово, наиболее близкое к «крутому», не может появиться в этом поддереве. Чтобы понять, почему такая обрезка правильна, обратите внимание, что слово-кандидат появление в поддереве «торта» с расстоянием менее 2 до «крутого» нарушит неравенство треугольника: неравенство треугольника требует, чтобы для этого набора из трех чисел (как сторон треугольника) никакие два не могли в сумме давать меньше третьего. , но здесь расстояние от "крутого" до "книжного" (а это 2) плюс расстояние от "крутого" до "книжного" (которое меньше 2) не может достичь или превысить расстояние от «книги» до «торта» (которое равно 4). Поэтому можно смело игнорировать все поддерево, основанное на «торте».
Затем извлекается узел, содержащий «книги». и сейчас , расстояние от «крутого» до «книги». Как , остается установленным на 2, и рассматривается единственная исходящая дуга из узла, содержащего «книги». Затем узел, содержащий «boo», извлекается из и , расстояние от «круто» до «бу». Это опять же не улучшает . Теперь учитывается каждая исходящая дуга от «бу»; дуга от «бу» до «благо» имеет вес 1, и поскольку , к слову добавляется «благо» . Аналогично, поскольку , к слову "повар" также добавляется .
Наконец, каждый из двух последних элементов в рассматриваются в произвольном порядке: предположим, что узел, содержащий слово «cook», извлекается первым, что улучшает на расстояние 1, то последним вытаскивается узел, содержащий «благо», который находится на расстоянии 2 от «крутого» и, следовательно, не улучшает лучший результат. Наконец, в качестве ответа возвращается «повар». с .
См. также
[ редактировать ]- Расстояние Левенштейна - метрика расстояния, обычно используемая при построении BK-дерева.
- Расстояние Дамерау – Левенштейна - модифицированная форма расстояния Левенштейна, допускающая транспозиции.
Ссылки
[ редактировать ]- ^ В. Буркхард и Р. Келлер. Некоторые подходы к поиску файлов наилучшего соответствия, CACM, 1973 г.
- ^ Р. Баеза-Йейтс, В. Кунто, У. Манбер и С. Ву. Сопоставление по близости с использованием фиксированных деревьев запросов. В М. Крочеморе и Д. Гасфилде, редакторах, 5-е комбинаторное сопоставление с образцом, LNCS 807, страницы 198–212, Асиломар, Калифорния, июнь 1994 г.
- ^ Рикардо Баэса-Йейтс и Гонсало Наварро. Быстрое приближенное сопоставление строк в словаре. Учеб. ШПИЛЬ'98