АВЛ-дерево

АВЛ-дерево
англ. AVL tree
Тип дерево поиска
Год изобретения 1962
Автор Адельсон-Вельский Георгий Максимович и Ландис Евгений Михайлович
Сложность в О-символике
В среднем В худшем случае
Расход памяти O(n) O(n)
Поиск O(log n) O(log n)
Вставка O(log n) O(log n)
Удаление O(log n) O(log n)
Логотип Викисклада Медиафайлы на Викискладе

АВЛ-дерево — сбалансированное по высоте двоичное дерево поиска: для каждой его вершины высота её двух поддеревьев различается не более чем на 1.

АВЛ — аббревиатура, образованная первыми буквами создателей (советских учёных) Адельсон-Вельского Георгия Максимовича и Ландиса Евгения Михайловича.

Максимальная высота

Максимальная высота АВЛ-дерева при заданном числе узлов [1]:

где:

(округлить вверх),

(округлить вниз),

(округлить вниз).

Количество возможных высот на практике сильно ограничено (при 32-битной адресации максимальная высота равна 45, при 48-битной — 68), поэтому лучше, возможно, заранее подсчитать все значения минимального количества узлов для каждой высоты с помощью рекуррентной формулы для дерева Фибоначчи:

,

,

.

Промежуточные значения количества узлов будут соответствовать предыдущей (меньшей) высоте.

Балансировка

Относительно АВЛ-дерева балансировкой вершины называется операция, которая в случае разницы высот левого и правого поддеревьев = 2, изменяет связи предок-потомок в поддереве данной вершины так, что разница становится <= 1, иначе ничего не меняет. Указанный результат получается вращениями поддерева данной вершины.

Используются 4 типа вращений:

1.Малое левое вращение Данное вращение используется тогда, когда разница высот L-поддерева и b-поддерева равна 2 и высота С <= высота R.

2.Большое левое вращение Данное вращение используется тогда, когда разница высот L-поддерева и b-поддерева равна 2 и высота c-поддерева > высота R.

3.Малое правое вращение Данное вращение используется тогда, когда разница высот R-поддерева и b-поддерева равна 2 и высота С <= высота L.

4.Большое правое вращение Данное вращение используется тогда, когда разница высот R-поддерева и b-поддерева равна 2 и высота c-поддерева > высота L.

В каждом случае достаточно просто доказать то, что операция приводит к нужному результату и что полная высота уменьшается не более чем на 1 и не может увеличиться. Также большое вращение это комбинация правого и левого малого вращения. Из-за условия балансированности высота дерева О(log(N)), где N- количество вершин, поэтому добавление элемента требует O(log(N)) операций.

Алгоритм добавления вершины

Показатель сбалансированности в дальнейшем будем интерпретировать как разность между высотой левого и правого поддерева, а алгоритм будет основаться на типе TAVLTree, описанном выше. Непосредственно при вставке (листу) присваивается нулевой баланс. Процесс включения вершины состоит из трех частей (данный процесс описан Никлаусом Виртом в «Алгоритмы и структуры данных»):

  1. Прохода по пути поиска, пока не убедимся, что ключа в дереве нет.
  2. Включения новой вершины в дерево и определения результирующих показателей балансировки.
  3. «Отступления» назад по пути поиска и проверки в каждой вершине показателя сбалансированности. Если необходимо — балансировка.

Будем возвращать в качестве результата функции, уменьшилась высота дерева или нет. Предположим, что процесс из левой ветви возвращается к родителю (рекурсия идет назад), тогда возможны три случая: { hl — высота левого поддерева, hr — высота правого поддерева } Включение вершины в левое поддерево приведет к

  1. hl < hr: выравняется hl = hr. Ничего делать не нужно.
  2. hl = hr: теперь левое поддерево будет больше на единицу, но балансировка пока не требуется.
  3. hl > hr: теперь hl — hr = 2, — требуется балансировка.

В третьей ситуации требуется определить балансировку левого поддерева. Если левое поддерево этой вершины (Tree^.left^.left) выше правого (Tree^.left^.right), то требуется большое правое вращение, иначе хватит малого правого. Аналогичные (симметричные) рассуждения можно привести и для включение в правое поддерево.

Алгоритм удаления вершины

Для простоты опишем рекурсивный алгоритм удаления. Если вершина — лист, то удалим её и вызовем балансировку всех её предков в порядке от родителя к корню. Иначе найдём самую близкую по значению вершину в поддереве наибольшей высоты (правом или левом) и переместим её на место удаляемой вершины, при этом вызвав процедуру её удаления.

Докажем, что данный алгоритм сохраняет балансировку. Для этого докажем по индукции по высоте дерева, что после удаления некоторой вершины из дерева и последующей балансировки высота дерева уменьшается не более, чем на 1. База индукции: Для листа очевидно верно. Шаг индукции: Либо условие балансированности в корне (после удаления корень может измениться) не нарушилось, тогда высота данного дерева не изменилась, либо уменьшилось строго меньшее из поддеревьев => высота до балансировки не изменилась => высота после балансировки уменьшится не более чем на 1.

Очевидно, что в результате указанных действий процедура удаления вызывается не более 3 раз, так как у вершины, удаляемой по второму вызову, нет одного из поддеревьев. Но поиск ближайшего каждый раз требует O(N) операций. Становится очевидной возможность оптимизации: поиск ближайшей вершины может быть выполнен по краю поддерева, что сокращает сложность до O(log(N)).

Нерекурсивная вставка в АВЛ-дерево сверху вниз

Нерекурсивный алгоритм сложнее рекурсивного.

  1. Находится место вставки и вершина, высота которой не изменится при вставке (это вершина, у которой высота левого поддерева не равна высоте правого; будем называть её PrimeNode)
  2. Выполняется спуск от PrimeNode до места вставки с изменением балансов
  3. Выполняется ребалансировка PrimeNode при наличии переполнения

Нерекурсивное удаление из АВЛ-дерева сверху вниз

Для реализации удаления будем исходить из того же принципа, что и при вставке: найдём вершину, удаление из которой не приведёт к изменению её высоты. Существует два случая:

  1. высота левого поддерева равна высоте правого поддерева (исключая случай, когда у листа нет поддеревьев)
  2. высота дерева по направлению движения меньше противоположной(«брат» направления) и баланс «брата» равен 0 (разбор этого варианта довольно сложен, так что пока без доказательства)

Для облегчения понимания приведённый алгоритм не содержит каких-либо оптимизаций. В отличие от рекурсивного алгоритма, найденная удаляемая вершина заменяется значением из левой подветви. Этот алгоритм можно оптимизировать так же, как и рекурсивный (за счёт того, что после нахождения удаляемой вершины известно направление движения):

  1. ищем удаляемый элемент и попутно находим нашу замечательную вершину
  2. производим изменение балансов, в случае необходимости делаем ребалансировку
  3. удаляем наш элемент (в действительности не удаляем, а заменяем его ключ и значение, учёт перестановок вершин будет немного сложнее)

Расстановка балансов при удалении

Как уже говорилось, если удаляемая вершина — лист, то она удаляется, и обратный обход дерева происходит от родителя удалённого листа. Если не лист — ей находится «замена», и обратный обход дерева происходит от родителя «замены». Непосредственно после удаления элемента — «замена» получает баланс удаляемого узла.

При обратном обходе: если при переходе к родителю пришли слева — баланс увеличивается на 1, если же пришли справа — уменьшается на 1.

Это делается до тех пор, пока при изменении баланса он не станет равным −1 или 1 (обратите внимание на различие с вставкой элемента!): в данном случае такое изменение баланса будет гласить о неизменной дельта-высоте поддеревьев. Повороты происходят по тем же правилам, что и при вставке.

Расстановка балансов при одинарном повороте

Обозначим:

  • «Current» — узел, баланс которого равен −2 или 2: то есть тот, который нужно повернуть (на схеме — элемент a)
  • «Pivot» — ось вращения. +2: левый сын Current’а, −2: правый сын Current’а (на схеме — элемент b)

Если поворот осуществляется при вставке элемента, то баланс Pivot’а равен либо 1, либо −1. В таком случае после поворота балансы обоих устанавливаются равными 0. При удалении всё иначе: баланс Pivot’а может стать равным 0 (в этом легко убедиться).

Приведём сводную таблицу зависимости финальных балансов от направления поворота и исходного баланса узла Pivot:

Направление поворота Old Pivot.Balance New Current.Balance New Pivot.Balance
Левый или Правый -1 или +1 0 0
Правый 0 -1 +1
Левый 0 +1 -1

Расстановка балансов при двойном повороте

Pivot и Current — те же самые, но добавляется третий участник поворота. Обозначим его за «Bottom»: это (при двойном правом повороте) левый сын Pivot’а, а при двойном левом — правый сын Pivot’а.

При данном повороте — Bottom в результате всегда приобретает баланс 0, но от его исходного баланса зависит расстановка балансов для Pivot и Current.

Приведём сводную таблицу зависимости финальных балансов от направления поворота и исходного баланса узла Bottom:

Направление Old Bottom.Balance New Current.Balance New Pivot.Balance
Левый или Правый 0 0 0
Правый +1 0 -1
Правый -1 +1 0
Левый +1 -1 0
Левый -1 0 +1

Оценка эффективности

Из формулы, приведённой выше, высота АВЛ-дерева никогда не превысит высоту идеально сбалансированного дерева более, чем на 45 %. Для больших имеет место оценка . Таким образом, выполнение основных операций требует порядка сравнений. Экспериментально выяснено, что одна балансировка приходится на каждые 2 включения и на каждые 5 исключений.

См. также

Сбалансированные (самобалансирующиеся) деревья:

Примечания

  1. Д. Кнут. Искусство Программирования. Сортировка и Поиск. — С. 460.

Литература

  • Вирт Н. Алгоритмы и структуры данных. — М.: Мир, 1989. — С. 272—286.
  • Адельсон-Вельский Г. М., Ландис Е. М. Один алгоритм организации информации // Доклады АН СССР. — 1962. — Т. 146, № 2. — С. 263—266.
  • Ben Pfaff. GNU libavl

Read other articles:

2020 South Korean television series Nobody KnowsPromotional posterHangul아무도 모른다 GenreCrimeMysteryMelodramaWritten byKim Eun-hyangDirected byLee Jeong-heumStarringKim Seo-hyungRyu Deok-hwanPark HoonAhn Ji-hoCountry of originSouth KoreaOriginal languageKoreanNo. of episodes16ProductionRunning time70 minutesProduction companyThe Story Works(SBS Media Holdings)Original releaseNetworkSBS TVReleaseMarch 2 (2020-03-02) –April 21, 2020 (2020-04-21) Nobody Knows (Korean...

 

Paul HeymanHeyman di bulan April 2016Nama lahirPaul HeymanLahir11 September 1965 (umur 58)Westchester County, New York, Amerika SerikatTempat tinggalScarsdale, New York, Amerika SerikatPasanganMarla Heyman (cerai)Anak2Karier gulat profesionalNama ringPaul E. DangerouslyPaul HeymanAsal dariScarsdale, New YorkDebut1987 Paul Heyman (lahir 11 September 1965) adalah seorang produser hiburan, penulis, pemain, pemasar, promotor, dan sesekali pegulat profesional, penasehat dan komentator Amerika...

 

Commelinids commelinids Dactylis glomerata (en) TaksonomiDivisiTracheophytaSubdivisiSpermatophytesKladAngiospermaeKladmonocotsTanpa nilaicommelinids Ordo Arecales Commelinales Poales Zingiberales Tidak termasuk famili Dasypogonaceae lbs Komelinida[Catatan kaki 1] atau commelinids adalah sekumpulan empat bangsa dan satu suku yang monofiletik dan memiliki keterkaitan taksonomi yang kuat, baik dari segi fenotipe maupun dari sisi molekular. Nama lainnya adalah core Monokotil (monokotil in...

Albert VictorAdipati Clarence dan AvondalePotret oleh William dan Daniel Downey, 1891Kelahiran(1864-01-08)8 Januari 1864Frogmore, Windsor BerkshireKematian14 Januari 1892(1892-01-14) (umur 28)Rumah Sandrigham, NorfolkPemakaman20 Januari 1892Kapel St. George, Kastel WindsorWangsaWangsa Saxe-Coburg dan GothaNama lengkapAlbert Victor Christian EdwardAyahEdward VII, Raja Britania RayaIbuAlexandra, Ratu Britania RayaAgamaGereja Inggris Pangeran Albert Victor, Adipati Clarence dan Avondale 8 J...

 

Spanish conquistador (1475–1538) For the city in Chile, see Diego de Almagro, Chile. For the island of Chile, see Diego de Almagro Island. AdelantadoDiego de AlmagroPersonal detailsBornc.1475Malagón[1] or Almagro, Crown of CastileDiedJuly 8, 1538 (aged 62–63)Cuzco, New Castile, Spanish EmpireNationalityCastilianSpouse(s)Ana MartínezMenciaChildrenDiego de Almagro II (son)Isabel de Almagro (daughter)ParentsJuan de Montenegro (father)Elvira Gutiérrez (mother)OccupationCon...

 

Suburban tram line in Hauts-de-Seine and Seine-Saint-Denis, north of Paris Île-de-France tramway Line 1 Île-de-France tramway Line 1 operating over green track approaches Gennevilliers stationOverviewOwnerÎle-de-France MobilitésTerminiAsnières – Quatre RoutesGare de Noisy-le-SecStations37ServiceTypeTramSystemTramways in Île-de-FranceOperator(s)RATP GroupRolling stock35 TFS-2Ridership51,000,000 per year (2022)HistoryOpened6 July 1992 (1992-07-06)TechnicalLine length17...

† Человек прямоходящий Научная классификация Домен:ЭукариотыЦарство:ЖивотныеПодцарство:ЭуметазоиБез ранга:Двусторонне-симметричныеБез ранга:ВторичноротыеТип:ХордовыеПодтип:ПозвоночныеИнфратип:ЧелюстноротыеНадкласс:ЧетвероногиеКлада:АмниотыКлада:Синапсиды�...

 

Collegiate university in Oxford, England Oxford University redirects here. For other uses, see Oxford University (disambiguation). University of OxfordCoat of armsLatin: Universitas OxoniensisOther nameThe Chancellor, Masters and Scholars of the University of Oxford[1]MottoLatin: Dominus illuminatio meaMotto in EnglishThe Lord is my lightTypePublic research universityEstablishedc. 1096; 928 years ago (1096)[2]Endowment£8.066 billion (2023; includi...

 

Gamal Abdul Nasir جمال عبد الناصر Presiden Republik Arab Bersatu Ke-1Masa jabatan22 Februari 1958 – 28 September 1970PendahuluKantor didirikanPenggantiAnwar SadatPresiden Mesir ke-2Masa jabatan23 Juni 1956 – 28 September 1970PendahuluMuhammad NaguibPenggantiAnwar SadatPerdana Menteri MesirMasa jabatan19 Juni 1967 – 28 September 1970PendahuluMuhammad Sedki SulaymanPenggantiMahmoud FawziMasa jabatan18 April 1954 – 29 September 1962Pendahu...

Artikel ini sebatang kara, artinya tidak ada artikel lain yang memiliki pranala balik ke halaman ini.Bantulah menambah pranala ke artikel ini dari artikel yang berhubungan atau coba peralatan pencari pranala.Tag ini diberikan pada November 2022. Field CateField CateLahirField Adrianus CatePekerjaanaktorTahun aktif2004-sekarangOrang tuaDianne Tangel-Cate, Christopher Cate Field Adrianus Cate (lahir 22 Juli 1997) adalah aktor asal Amerika Serikat. Ia tinggal di Los Angeles, Kalifornia. Fil...

 

Cet article est une ébauche concernant un musicien indien. Vous pouvez partager vos connaissances en l’améliorant (comment ?) selon les recommandations des projets correspondants. Pour les articles homonymes, voir Khan (homonymie). Bismillah KhanKhan en 1964BiographieNaissance 21 mars 1916Dumraon (en)Décès 21 août 2006 (à 90 ans)BénarèsNom dans la langue maternelle بسم اللہ خانNationalité indienneActivité MusicienEnfants Nazim Hussain (en)Zamin Hussain Khan (d...

 

1979 non-fiction book Fifty Classic Climbs of North America Cover of first paperback edition. Dick Long on the East Buttress of Middle Cathedral Rock.AuthorSteve RoperAllen SteckCountryUnited StatesLanguageEnglishSubjectClimbingGenreNon-fictionPublisherSierra Club BooksPublication date1979Media typePrintISBN0-87156-292-8 Fifty Classic Climbs of North America is a climbing guidebook and history written by Steve Roper and Allen Steck.[1] It is considered a classic piece of climbin...

This article is about the persecution of homosexual men. For lesbians, see Lesbians in Nazi Germany. Memorial in Nollendorfplatz, Berlin. Text in triangle: Struck DeadHushed Up[dedicated to] The homosexual victims of National Socialism Text below: The 'pink triangle' was the sign with which the National Socialists marked homosexuals in the concentration camps in a defamatory way. From January 1933 almost all homosexual locales in and around Nollendorfplatz were closed by the National Sociali...

 

American Jesuit Catholic magazine America MagazineEditorSam Sawyer, S.J.Former editorsDrew ChristiansenThomas J. ReeseCategoriesChristianity (Catholicism)FrequencyMonthlyCirculation45,000PublisherAmerican JesuitsFounded 1909 (1909-month)CompanyAmerica MediaCountryUnited StatesBased inNew York CityLanguageEnglishWebsitewww.americamagazine.org ISSN0002-7049 America is a monthly Catholic magazine published by the Jesuits of the United States and headquartered in midtown Manhattan. It c...

 

إن حيادية وصحة هذه المقالة محلُّ خلافٍ. ناقش هذه المسألة في صفحة نقاش المقالة، ولا تُزِل هذا القالب من غير توافقٍ على ذلك. (نقاش) (September 2010) مثال على نموذج قاعدة بيانات كائن.[1] قاعدة بيانات الكائن (والتي تسمى أيضا قاعدة بيانات كائنية التوجه) هي مفهوم قواعد البيانات والذي ي�...

Axel von Sneidern Född9 september 1875[1][2]Skallsjö församling[3][1][2], SverigeDöd23 maj 1950[1][2] (74 år)Holms församling[1][2], SverigeMedborgare iSverigeUtbildad vidUppsala universitet[2]Kungliga Tekniska högskolan[2] SysselsättningGodsägare[3][2], politiker[2]BefattningAndrakammarledamot, Älvsborgs läns norra valkrets (1912–1920)[2]Förstakammarledamot, Älvsborgs läns valkrets (1921–1927)[4][2]Landshövding i Älvsborgs län (1922–1941)[2]Politiskt par...

 

The Tolchkovo Church (1671–87) is representative of the last phase of medieval Russian architecture. It is characterized by elaborate brick tracery and the vertical ascent of its 15 domes Russian churches often have various recurrent elements in their architecture. The onion dome is for example a recurrent and important element in the architecture of Russian churches. Often Russian churches have also multi-colored filigree ornamental elements. Furthermore the colour white plays an important...

 

This article appears to be slanted towards recent events. Please try to keep recent events in historical perspective and add more content related to non-recent events. (October 2020) The history of Sheffield United Football Club, an English football club based in Sheffield, dates back to the club's formation in 1889. Formative years Sheffield United Football Club was formed at Bramall Lane on 22 March 1889 by the Sheffield United Cricket Club at the suggestion of its president, Sir Charles Cl...

Cuban baseball player and manager (1923-2009) Baseball player Preston GómezAs manager of the Spokane IndiansInfielder / ManagerBorn: (1923-04-20)April 20, 1923Central Preston, Oriente Province, CubaDied: January 13, 2009(2009-01-13) (aged 85)Fullerton, California, U.S.Batted: RightThrew: RightMLB debutMay 5, 1944, for the Washington SenatorsLast MLB appearanceAugust 12, 1944, for the Washington SenatorsMLB statisticsBatting average.286Home runs0Runs batted ...

 

Questa voce sull'argomento calciatori olandesi è solo un abbozzo. Contribuisci a migliorarla secondo le convenzioni di Wikipedia. Segui i suggerimenti del progetto di riferimento. Albert Snouck HurgronjeNazionalità Paesi Bassi Calcio RuoloAttaccante CarrieraSquadre di club1 1924-1925 HVV? (?) Nazionale 1924-1925 Paesi Bassi6 (1) 1 I due numeri indicano le presenze e le reti segnate, per le sole partite di campionato.Il simbolo → indica un trasferimento in prestito.   ...