Розширюване дерево (англ. splay tree) є двійковим деревом пошуку, у якому підтримується збалансованість. Це дерево належить до класу «саморегульованих дерев», які підтримують необхідний баланс галуження дерева, щоб забезпечити виконання операції пошуку, додавання і видалення за логарифмічний час від числа елементів, що зберігаються. Це реалізується без використання яких-небудь додаткових полів у вузлах дерева (як, наприклад, в Червоно-чорних деревах або АВЛ-деревах, де у вершинах зберігається, відповідно, колір вершини і глибина піддерева). Замість цього «розширювальні операції» (splay operation), частиною яких є повороти дерева, які виконуються при кожному зверненні до дерева. Облікова вартість з розрахунку на одну операцію з деревом складає .
Розширюване дерево | ||
---|---|---|
Тип | Дерево | |
Винайдено | 1985 | |
Обчислювальна складність у записі великого О | ||
Середня | Найгірша | |
Простір | O(n) | O(n) |
Пошук | O(log n) | амортиз. O(log n) |
Вставляння | O(log n) | амортиз. O(log n) |
Видалення | O(log n) | амортиз. O(log n) |
Розширюване дерево придумали і в 1985 році.
Операції
Splay (розширення)
Основна операція дерева. Полягає в переміщенні вершини в корінь за допомогою послідовного виконання трьох, наведених нижче, операцій: Zig, Zig-Zig і Zig-Zag. Позначимо вершину, яку хочемо перемістити в корінь за x, її родича — p, а родича p (якщо існує) — g.
Zig: виконується, коли p є коренем. Дерево повертається по ребру між x та p. Існує лише для розбору крайнього випадку і виконується лише один раз в кінці, коли початкова глибина x була непарна.
Zig-Zig: виконується, коли x і p є лівими (або правими) синами. Дерево повертається по ребру між p та x.
Zig-Zag: виконується, коли x є правим сином, а p — лівим (чи навпаки). Дерево повертається по ребру між p та x, а потім — по ребру між x та g.
Search (пошук елемента)
Пошук виконується як в звичайному двійковому дереві пошуку. При знаходженні елементу запускаємо Splay для нього.
Insert (додавання елемента)
Запускаємо Splay від елементу, що додається, і підвішуємо дерева, що вийшли, за нього.
Delete (видалення елемента)
Знаходимо елемент в дереві, робимо Splay для нього, робимо поточним деревом Merge його дітей.
Merge (об'єднання двох дерев)
Для злиття дерев T1 і T2, в яких всі ключі T1 менше ключів в T2, робимо Splay для максимального елементу T1, тоді біля кореня T1 не буде правого дочірнього елемента. Після цього робимо T2 правим дочірнім елементом T1.
Split (розділення дерева на дві частини)
Для розділення дерева знайдемо найменший елемент, більший або рівний x і зробимо для нього Splay. Після цього відрізуємо біля кореня лівого дочірнього елемента і повертаємо 2 дерева, що вийшли.
Примітка
Розширюване дерево, надає самозмінну структуру — структуру, що характеризується тенденцією зберігати вузли, до яких часто відбувається звернення, поблизу верхівки дерева, тоді як вузли до яких звернення відбувається рідко переміщуються ближче до листя. Таким чином, час звернення до часто відвідуваних вузлів буде менший, а час звернення до рідко відвідуваних вузлів — більше середнього.
Розширюване дерево не володіє жодними явними функціями балансування, але процес скосу вузлів до кореня сприяє підтримці дерева в збалансованому вигляді.
Аналіз
Амортизована вартість будь-якої операції на розширюваному дереві становить де це кількість вузлів у дереві. Будь-яка операція на дереві може зайняти часу, але, як правило, також робить дерево більш збалансованим, так що з плином часу середня вартість операції є
Для отримання заявленої оцінки використаємо метод потенціалів. По-перше визначимо вагу, суму і функцію рангу для кожного вузла:
- Кожен вузол має вагу (з метою аналізу, може бути будь-якою)
- (вага вузла дорівнює сумі ваг усіх вузлів його піддерева)
Визначимо потенціал усього розширюваного дерева в будь-який момент як суму рангів у дереві:
Потенціал вимірює наскільки збалансованим є дерево. Чим менше потенціал тим ліпше збалансоване дерево. Амортизаційна вартість операції складається з дійсної вартості плюс зміна потенціалу дерева.
Амортизована вартість одного кроку розширення
Нехай буде ранг перед розширенням і нехай буде ранг після розширення. Тоді амортизаційна вартість розширення
- у випадку ZIG
- у випадках ZIG-ZIG і ZiG-ZAG
Доведення: Позначимо амортизовану вартість як і дійсну вартість як
Розглянемо кожен з випадків окремо:
- ZIG
- Дійсна вартість дорівнює 1, тому що ми здійснюємо лише одне обертання, щоб перенести в корінь. Оскільки і маємо:
- ZIG-ZIG
- Дійсна вартість є 2, бо ми виконуємо подвійне обертання. Використавши те, що маємо:
- Для подальшого спрощення звернімо увагу на факт, що — угнута функція, тобто для будь-яких повинно виконуватись Зауважимо, що Через угнутість функції маємо по транзитивності Отже,
- ZIG-ZAG аналогічно до ZIG-ZIG маємо:
Амортизаційний аналіз операції розширення
Наступні два наслідки слідують з попереднього аналізу.
Наслідок І
Нехай буде вершиною розширюваного дерева перед виконанням операції розширення. Тоді амортизована вартість розширення вузла становить
Доведення: Амортизована вартість розширення в дорівнює сумі вартостей всіх кроків розширення. Під час складання проміжні члени скорочуються і отримуємо, що розширення є Доданок 1 відповідає за можливість ZIG-обертання.
Цей аналіз незалежний від ваг у дереві. Припустимо, що ми встановили всі ваги в 1. Тоді найбільша можлива різниця між і дорівнює від кількості вузлів у дереві. Отже, амортизована вартість розширення є
Наслідок ІІ
Дійсна вартість послідовності з розширень становить
Див. також
Сбалансовані дерева:
Примітки
- Розширюване дерево [ 19 березня 2015 у Wayback Machine.] на MIT OpenCourseWare
Джерела
- Т. Кормен; Ч. Лейзерсон; Р. Рівест; К. Стайн (2009) [1990]. Вступ до алгоритмів (вид. 3rd). MIT Press і McGraw-Hill. ISBN .
- Daniel Sleator, Robert Tarjan. A data structure for dynamic trees. — Journal of Computer and System Sciences, 1983. — С. 262-391.
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Rozshiryuvane derevo angl splay tree ye dvijkovim derevom poshuku u yakomu pidtrimuyetsya zbalansovanist Ce derevo nalezhit do klasu samoregulovanih derev yaki pidtrimuyut neobhidnij balans galuzhennya dereva shob zabezpechiti vikonannya operaciyi poshuku dodavannya i vidalennya za logarifmichnij chas vid chisla elementiv sho zberigayutsya Ce realizuyetsya bez vikoristannya yakih nebud dodatkovih poliv u vuzlah dereva yak napriklad v Chervono chornih derevah abo AVL derevah de u vershinah zberigayetsya vidpovidno kolir vershini i glibina piddereva Zamist cogo rozshiryuvalni operaciyi splay operation chastinoyu yakih ye povoroti dereva yaki vikonuyutsya pri kozhnomu zvernenni do dereva Oblikova vartist z rozrahunku na odnu operaciyu z derevom skladaye O log n displaystyle O log n Rozshiryuvane derevo Tip Derevo Vinajdeno 1985 Obchislyuvalna skladnist u zapisi velikogo O Serednya Najgirsha Prostir O n O n Poshuk O log n amortiz O log n Vstavlyannya O log n amortiz O log n Vidalennya O log n amortiz O log n Rozshiryuvane derevo pridumali i v 1985 roci OperaciyiSplay rozshirennya Osnovna operaciya dereva Polyagaye v peremishenni vershini v korin za dopomogoyu poslidovnogo vikonannya troh navedenih nizhche operacij Zig Zig Zig i Zig Zag Poznachimo vershinu yaku hochemo peremistiti v korin za x yiyi rodicha p a rodicha p yaksho isnuye g Zig vikonuyetsya koli p ye korenem Derevo povertayetsya po rebru mizh x ta p Isnuye lishe dlya rozboru krajnogo vipadku i vikonuyetsya lishe odin raz v kinci koli pochatkova glibina x bula neparna Zig Zig vikonuyetsya koli x i p ye livimi abo pravimi sinami Derevo povertayetsya po rebru mizh p ta x Zig Zag vikonuyetsya koli x ye pravim sinom a p livim chi navpaki Derevo povertayetsya po rebru mizh p ta x a potim po rebru mizh x ta g Search poshuk elementa Poshuk vikonuyetsya yak v zvichajnomu dvijkovomu derevi poshuku Pri znahodzhenni elementu zapuskayemo Splay dlya nogo Insert dodavannya elementa Zapuskayemo Splay vid elementu sho dodayetsya i pidvishuyemo dereva sho vijshli za nogo Delete vidalennya elementa Znahodimo element v derevi robimo Splay dlya nogo robimo potochnim derevom Merge jogo ditej Merge ob yednannya dvoh derev Dlya zlittya derev T1 i T2 v yakih vsi klyuchi T1 menshe klyuchiv v T2 robimo Splay dlya maksimalnogo elementu T1 todi bilya korenya T1 ne bude pravogo dochirnogo elementa Pislya cogo robimo T2 pravim dochirnim elementom T1 Split rozdilennya dereva na dvi chastini Dlya rozdilennya dereva znajdemo najmenshij element bilshij abo rivnij x i zrobimo dlya nogo Splay Pislya cogo vidrizuyemo bilya korenya livogo dochirnogo elementa i povertayemo 2 dereva sho vijshli PrimitkaRozshiryuvane derevo nadaye samozminnu strukturu strukturu sho harakterizuyetsya tendenciyeyu zberigati vuzli do yakih chasto vidbuvayetsya zvernennya poblizu verhivki dereva todi yak vuzli do yakih zvernennya vidbuvayetsya ridko peremishuyutsya blizhche do listya Takim chinom chas zvernennya do chasto vidviduvanih vuzliv bude menshij a chas zvernennya do ridko vidviduvanih vuzliv bilshe serednogo Rozshiryuvane derevo ne volodiye zhodnimi yavnimi funkciyami balansuvannya ale proces skosu vuzliv do korenya spriyaye pidtrimci dereva v zbalansovanomu viglyadi AnalizAmortizovana vartist bud yakoyi operaciyi na rozshiryuvanomu derevi stanovit O log n displaystyle O log n de n displaystyle n ce kilkist vuzliv u derevi Bud yaka operaciya na derevi mozhe zajnyati O n displaystyle O n chasu ale yak pravilo takozh robit derevo bilsh zbalansovanim tak sho z plinom chasu serednya vartist operaciyi ye O log n displaystyle O log n Dlya otrimannya zayavlenoyi ocinki O log n displaystyle O log n vikoristayemo metod potencialiv Po pershe viznachimo vagu sumu i funkciyu rangu dlya kozhnogo vuzla Kozhen vuzol X displaystyle X maye vagu w X gt 0 displaystyle w X gt 0 z metoyu analizu mozhe buti bud yakoyu s X S Y s u b t r e e X w Y displaystyle s X Sigma Y in subtree X w Y vaga vuzla dorivnyuye sumi vag usih vuzliv jogo piddereva r X log 2 s X displaystyle r X log 2 s X Viznachimo potencial usogo rozshiryuvanogo dereva v bud yakij moment i displaystyle i yak sumu rangiv u derevi 8 i X t r e e r X displaystyle theta i sum X in tree r X Potencial vimiryuye naskilki zbalansovanim ye derevo Chim menshe potencial tim lipshe zbalansovane derevo Amortizacijna vartist operaciyi skladayetsya z dijsnoyi vartosti plyus zmina potencialu dereva Amortizovana vartist odnogo kroku rozshirennya Nehaj r X displaystyle r X bude rang X displaystyle X pered rozshirennyam i nehaj r X displaystyle r X bude rang X displaystyle X pislya rozshirennya Todi amortizacijna vartist rozshirennya u vipadku ZIG 3 r X r X 1 displaystyle leq 3 r X r X 1 u vipadkah ZIG ZIG i ZiG ZAG 3 r X r X displaystyle leq 3 r X r X Dovedennya Poznachimo amortizovanu vartist yak c displaystyle hat c i dijsnu vartist yak c displaystyle c Rozglyanemo kozhen z vipadkiv okremo ZIG c c 8 i 1 8 i 1 r X r P r X r P displaystyle hat c c theta i 1 theta i 1 r X r P r X r P Dijsna vartist dorivnyuye 1 tomu sho mi zdijsnyuyemo lishe odne obertannya shob perenesti X displaystyle X v korin Oskilki r X r P displaystyle r X r P i r P r X displaystyle r P leq r X mayemo c 1 r X r X 1 3 r X r X displaystyle hat c leq 1 r X r X leq 1 3 r X r X ZIG ZIG Dijsna vartist ye 2 bo mi vikonuyemo podvijne obertannya Vikoristavshi te sho r X r G r P r X r P r X displaystyle r X r G r P geq r X r P leq r X mayemo c c 8 i 1 8 i displaystyle hat c c theta i 1 theta i 2 r X r P r G r X r P r G displaystyle 2 r X r P r G r X r P r G 2 r X r G r X r X displaystyle leq 2 r X r G r X r X Dlya podalshogo sproshennya zvernimo uvagu na fakt sho log displaystyle log ugnuta funkciya tobto dlya bud yakih a gt 0 b gt 0 displaystyle a gt 0 b gt 0 povinno vikonuvatis log 2 a log 2 b 2 log 2 a b 2 displaystyle frac log 2 a log 2 b 2 leq log 2 frac a b 2 Zauvazhimo sho s X s G s X displaystyle s X s G leq s X Cherez ugnutist funkciyi log displaystyle log mayemo r X r G 2 log 2 s X s G 2 displaystyle frac r X r G 2 leq log 2 frac s X s G 2 po tranzitivnosti r X r G 2 log 2 s X 2 r X 1 displaystyle frac r X r G 2 leq log 2 frac s X 2 r X 1 Otzhe c 2 r X 2 r X 2 r X r X r X 3 r X r X displaystyle hat c leq 2 r X 2r X 2 r X r X r X leq 3 r X r X ZIG ZAG analogichno do ZIG ZIG mayemo c 3 r X r X displaystyle hat c leq 3 r X r X Amortizacijnij analiz operaciyi rozshirennya Nastupni dva naslidki sliduyut z poperednogo analizu Naslidok I Nehaj V displaystyle V bude vershinoyu rozshiryuvanogo dereva pered vikonannyam operaciyi rozshirennya Todi amortizovana vartist rozshirennya vuzla X displaystyle X stanovit O log n displaystyle O log n Dovedennya Amortizovana vartist rozshirennya v X displaystyle X dorivnyuye sumi vartostej vsih krokiv rozshirennya Pid chas skladannya promizhni chleni skorochuyutsya i otrimuyemo sho rozshirennya X displaystyle X ye 3 r X r X 1 displaystyle leq 3 r X r X 1 Dodanok 1 vidpovidaye za mozhlivist ZIG obertannya Cej analiz nezalezhnij vid vag u derevi Pripustimo sho mi vstanovili vsi vagi v 1 Todi najbilsha mozhliva riznicya mizh r V displaystyle r V i r X displaystyle r X dorivnyuye log displaystyle log vid kilkosti vuzliv u derevi Otzhe amortizovana vartist rozshirennya X displaystyle X ye O log n displaystyle O log n Naslidok II Dijsna vartist poslidovnosti z m displaystyle m rozshiren stanovit O m n log n displaystyle O m n log n Div takozhSbalansovani dereva Chervono chorne derevo AVL derevoPrimitkiRozshiryuvane derevo 19 bereznya 2015 u Wayback Machine na MIT OpenCourseWareDzherelaT Kormen Ch Lejzerson R Rivest K Stajn 2009 1990 Vstup do algoritmiv vid 3rd MIT Press i McGraw Hill ISBN 0 262 03384 4 Daniel Sleator Robert Tarjan A data structure for dynamic trees Journal of Computer and System Sciences 1983 S 262 391