14. Търсещи дървата - втора част

Многоканални търсещи дървета
-- Дефиниция
-- Търсене в многоканално търсещо дърво
(2,4) дървета
-- Дефиниция
-- Операции за промяна: вмъкване и премахване
Червено-черни дървета
-- Дефиниция
-- Операции за промяна: вмъкване и премахване
-- C++ реализация


Наредени дървета

Едно дърво е наредено, ако е дефинирана линейна наредба за децата на всеки възел (наредба на братя/сестри).
Основни операции:
     Position root();
    Position parent(Position);
    PositionIterator children(Position);
    boolean isInternal(Position);
    boolean isExternal(Position);
    boolean isRoot(Position);



Многоканални търсещи дървета (Multi-Way Search Trees)

Дефиниция
Пример: {11, 24}({2, 6, 8}, {15}, {27, 32}({30}))



Търсене в многоканално търсещо дърво

Подобно е на търсене в двоични търсещи дървета.

30 > 24 - дясно, 27 < 30 < 32 - долу, 30 = 30 - намерен ключ
11 < 20 < 24 - долу, 20 > 15 - дясно - листо, няма такъв ключ

(2,4) дървета

Дефиниция

Пример: {10,15,24}({2,8}, {12}, {18}, {27,32})



Операции за промяна (Update Operations)

Вмъкване


Algorithm insertItem(k, e)
1.We search for key k to locate the insertion node v
2.We add the new item (k, e) at node v
3. while overflow(v)
        if isRoot(v)
            create a new empty root above v
        vsplit(v)


Анализ на вмъкването в (2,4) дърво

Премахване (Removal)

  1. слива се v със съседния брат/сестра w;
  2. премества се ключ от u в слетия възел v'.
  • Изпразването може да се появи по пътя към корена и отново да трябва да се приложи операция стопяване. 

    1. премества се детето на w и то става дете на v;
    2. премества се ключ от u във v;
    3. премества се ключ от w в u.
  • След тази операция няма изпразване.



  • Анализ на операция премахване в (2,4) дърво

    B-Trees - визуализация


    Червено-черни дървета

    Дефиниция


    Представяне на червено-черно дърво: черните възли са bold, а червените - italic. Външните възли не са включени в представянето.

    Примерчервено-черно дърво: 9(4(2, 6(7)), 15(12, 21))   <->   (2, 4) дърво {4, 9}({2}, {6, 7}, {12, 15, 21})



    Операции за обновяване

    Вмъкване


    • Случай 1: w е черен:
      •  Двойнo червено е неправилно представяне на 4-възел в (2,4) дърво.
      • С операция реконструкция (restructuring) променяме представянето на 4-възел в  (2,4) дърво.

    • Случай 2: w е червен:
      • Двойно червено съответства на препълване в (2,4) дърво.
      • Операция преоцветяване (recoloring) е еквивалентна на операция разделяне (split) на 5-възел в  (2,4) дърво.




    Анализ на операция вмъкване в червено-черно дърво
    Премахване (Removal)


    Реорганизация на червено-черно дърво

    Вмъкване (двойно червено)
    Червено-черно дърво
    (2,4) дърво
    Резултат
    Реконструкция (restructuring) Представяне на 4-възел
    Двойно червеното изчезва
    Преоцветяване (recoloring)
    Разделяне (split)
    Двойно червеното изчезва или се премества към корена

    Премахване (двойно черно)
    Червено-черно дърво
    (2,4) дърво
    Резултат
    Реконструкция (restructuring)
    Трансфер (transfer)
    Двойно черното изчезва
    Преоцватяване (recoloring)
    Стопяване (fusion)
    Двойно черното изчезва или се премества към корена
    Наместване (adjustment)
    Представяне на 3-възел
    Следва реконструкция или преоцветяване

    Red/Black Tree - визуализация

    C++ Implementation

    html-9.11 (RBItem)
    html-9.12 (RBTree1)
    html-9.13 (RBTree2)
    html-9.14 (RBTree3)