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

BK-дерево является метрикой дерева предложенного Walter Austin Буркхардом и Роберт М. Келлером [1] , специально адаптированы к дискретным метрическим пространствам . Для простоты рассмотрим целочисленную дискретную метрику . Тогда BK-дерево определяется следующим образом. В качестве корневого узла выбирается произвольный элемент a . У корневого узла может быть ноль или более поддеревьев. К-е поддерево рекурсивно построено из всех элементов Ь такие , что . BK-деревья можно использовать для приблизительного сопоставления строк в словаре. [2] [ нужен пример ]

Пример [ править ]

Пример BK-дерева

На этом рисунке изображено BK-дерево для полученного набора слов {"книга", "книги", "торт", "бу", "благо", "повар", "торт", "накидка", "тележка"}. с помощью расстояния Левенштейна

  • каждый узел помечен строкой из ;
  • каждая дуга помечена где обозначает слово, которому присвоено .

BK-дерево построено так, чтобы:

  • для всех узлов BK-дерева веса, присвоенные его выходным дугам, различны;
  • для всех дуги , помеченной , каждый потомок из удовлетворяет следующему уравнению: :
    • Пример 1: Рассмотрим дугу от «книги» к «книгам». Расстояние между словом "book" и любым словом в {"books", "boo", "boon", "cook"} равно 1;
    • Пример 2: Рассмотрим дугу от «книги» до «бу». Расстояние между словом "книги" и любым словом в {"бу", "благо", "повар"} равно 2.

Вставка [ править ]

Примитив вставки используется для заполнения BK-дерева в соответствии с дискретной метрикой .

Вход:

  • : БК-дерево;
    • обозначает вес, присвоенный дуге ;
    • обозначает слово, присвоенное узлу );
  • : дискретная метрика, используемая (например, расстояние Левенштейна );
  • : элемент, в который нужно вставить ;

Выход:

  • Узел, соответствующий

Алгоритм:

  • Если пуст:
    • Создайте корневой узел в
    • Возвращаться
  • Установить в корень
  • Пока существует:
    • Если :
      • Возвращаться
    • Найдите ребенка такого, что
    • Если не найдено:
      • Создать узел
      • Создайте дугу
      • Возвращаться

Поиск [ править ]

Для найденного элемента поисковый примитив просматривает BK-дерево, чтобы найти ближайший элемент . Ключевая идея состоит в том, чтобы ограничить исследование узлами, которые могут улучшить только лучшего кандидата, найденного на данный момент, за счет использования структуры BK-дерева и неравенства треугольника (критерий отсечения).

Вход:

  • : БК-дерево;
  • : соответствующая дискретная метрика (например, расстояние Левенштейна );
  • : искомый элемент;
  • : максимально допустимое расстояние между лучшим совпадением и , по умолчанию ;

Выход:

  • : элемент, ближайший к хранящемуся, согласно или если не найден;

Алгоритм:

  • Если пусто:
    • Возвращаться
  • Создание набора узлов в процессе, и вставить корень в .
  • Пока :
    • Извлечь произвольный узел из
    • Если :
    • Для каждой исходящей дуги :
      • Если : (критерий отсечения)
        • Вставить в .
  • Возвращаться

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

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

Внешние ссылки [ править ]

  • Реализация BK-дерева в Common Lisp с результатами тестирования и графиками производительности.
  • Объяснение BK-деревьев и их отношения к метрическим пространствам [3]
  • Объяснение BK-Trees с реализацией на C # [4]
  • Реализация BK-дерева в Lua [5]
  • Реализация BK-дерева в Python [6]