Трійкове дерево пошуку

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
Трійкове дерево пошуку (ТДП)
Тип дерево
Обчислювальна складність
у записі великого О
Середня Найгірша
Простір
Пошук O(log n) O(n)
Вставляння O(log n) O(n)
Видалення O(log n) O(n)

В інформатиці трійкове дерево пошуку — це тип префіксного дерева, де вузли розташовані таким чином, як в двійковому дереві пошуку, але мають щонайбільше троє дітей, замість двох (як у двійковому дереві пошуку). Як і інші префіксні дерева, трійкове дерево пошуку може бути використано як асоціативний масив з можливістю поступового пошуку рядків. Зазвичай трійкові дерева пошуку мають кращу просторову складність у порівнянні зі звичайними префіксними деревами, нехтуючи часовою складністю. Трійкові дерева пошуку переважно застосовують для написання алгоритмів перевірки орфографії та автодоповнення.

Опис[ред. | ред. код]

Кожен вузол трійкового дерева пошуку зберігає один символ, об'єкт (або вказівник на об'єкт, залежно від реалізації), і три вказівники (троє дітей), умовно названих equal kid, lo kid і hi kid, які також можуть називатися відповідно як середня дитина, мала дитина і велика дитина[1] . Вузол може також мати вказівник на батьківський вузол, а також позначку того, чи є вузол кінцем слова. Вказівник lo kid повинен вказувати на вузол, значення символу якого менше ніж поточний вузол . Вказівник hi kid повинен вказувати на вузол, символ якого більше ніж значення у поточному вузлі[2]. Equal kid вказує на наступного символ у слові. На малюнку нижче показано трійкове дерево пошуку, яке зберігає у собі такі рядки: «cute», «cup», «at», «as», «he», «us» та «i»:

          c
        / | \
       a  u  h
       |  |  | \
       t  t  e  u
     /  / |   / |
    s  p  e  i  s

Як і у випадку з іншими видами префіксних дерев, кожен вузол у трійковому дереві пошуку представляє префікс збережених рядків. Усі рядки в середньому піддереві вузла починаються з цього префікса.

Застосування[ред. | ред. код]

Трійкове дерева пошуку використовуються для вирішення багатьох проблем, де потрібно зберегти велику кількість рядків і потім шукати чи діставати рядок у довільному порядку. Нижче наведено деякі найпоширеніші або найкорисніші з них:

Див. також[ред. | ред. код]

Примітки[ред. | ред. код]

  1. а б Bentley, Jon; Sedgewick, Bob. Ternary Search Trees. Dr. Dobb's. Архів оригіналу за 10 лютого 2022. Процитовано 8 січня 2022.
  2. а б Efficient auto-complete with a ternary search tree. Архів оригіналу за 7 лютого 2015. Процитовано 8 січня 2022.
  3. а б Flint, Wally (16 лютого 2001). Plant your data in a ternary search tree. InfoWorld (англ.). Архів оригіналу за 8 січня 2022. Процитовано 8 січня 2022.