Algoritmai ir duomenų struktūros (ADS)

Slides:



Advertisements
Similar presentations
AVL Trees When bad trees happen to good programmers.
Advertisements

Info 3.3. Chapter 3.3 Recursive Data Structures Part 2 : Binary Trees.
AVL Tree Rotations Daniel Box. Binary Search Trees A binary search tree is a tree created so that all of the items in the left subtree of a node are less.
CPSC 252 AVL Trees Page 1 AVL Trees Motivation: We have seen that when data is inserted into a BST in sorted order, the BST contains only one branch (it.
Trees Types and Operations
Ceng-112 Data Structures I Chapter 8 Search Trees.
AVL Trees Data Structures & File Management Computer Science Dept Va Tech January 2004 © McQuain WD 1 Balanced Binary Trees Binary search trees.
AVL Trees Balanced Trees. AVL Tree Property A Binary search tree is an AVL tree if : –the height of the left subtree and the height of the right subtree.
Binary Search Trees CSE 331 Section 2 James Daly.
1 AVL Trees II Implementation. 2 Download: 2011_03_28_AVL_Tree/ File AVL_Tree_Demo.zip
CPSC 221: Algorithms and Data Structures Lecture #6 Balancing Act Steve Wolfman 2014W1 1.
©Ian Sommerville 2000 Software Engineering, 6th edition. Chapter 20 Slide 1 Struktūrinis Testavimas.
1 Komponentai, kurie turi būti patikrinti, yra objektų klasės, kurios realizuojamos kaip objektai. l Didesniems vienetams negu individuali funkcija “baltos.
AVL Trees. AVL Node Structure The AVL node structure follows the same structure as the binary search tree, with the addition of a term to store the.
Pascal Programming Pointers and Dynamic Variables.
Lietuvos vardo kilmė Žmogus, nepažįstantis savo tautos namų – Tėvynės žemės, kurioje nuo seno tėvai ir protėviai gyveno, - nėra savo krašto pilietis! Įsisąmoninkime.
Data Structures: A Pseudocode Approach with C, Second Edition1 Objectives Upon completion you will be able to: Explain the differences between a BST and.
Chapter 6 (cont’) 1 AVL Tree. Search Trees 2 Two standard search trees: Binary Search Trees (non-balanced) All items in left sub-tree are less than root.
Muzikos ženklų karuselė
Vaizdinė užduotis. Kuriose iš šių valstybių galima pamatyti tokius gyvenamuosius namus? Jemene Tanzanijoje Mongolijoje Indonezijoje A B C D 1.
Duomenų struktūros KTU1 / 47 Kontrolinis – 2014 spalio d. Kontrolinis – tai teorinių žinių apie Java kalbos struktūras patikrinimas Bus vykdomas:
Klasės ir Objektai Javoje
Balanced Binary Search Trees
CISC220 Fall 2009 James Atlas Lecture 13: Binary Trees.
CS202 - Fundamental Structures of Computer Science II
SYSTEM OF PROGRAMMING BUDGET
CS202 - Fundamental Structures of Computer Science II
CS 261 – Recitation 7 Fall 2010 CS 261 – Data Structures
Algoritmai ir duomenų struktūros (ADS)
Šiandieninio verslo tendencijos Šiandieninio verslo tendencijos: Tendencijos: Mažmeninės prekybos kraštovaizdis pasikeis nuo „plytų ir skiedinio“ iki „paspausk.
Smart none of us are as smart as all of us. smart none of us are as smart as all of us.
Skaičiai a.
Darbą parengė: Viktorija Drūteikaitė IT2
Robert Andruškevič AT27D.   Tai yra operacinė sistema, daugiausia naudojama išmaniuosiuose telefonuose, nors ją galima įdiegti ir kituose mobiliuosiuose.
Esant PMS’ui ir klimakteriniam diskomfortui
Rikiavimo - Rūšiavimo algoritmai
Algoritmai ir duomenų struktūros (ADS)
AVL Tree A Balanced Binary Search Tree
מערכת הרבייה באדם ערכו וכתבו: אורית עמיאל-שרון והעיקר האהבה
Ernestas Kaukėnas MIF IT 3grupė
Logika a.
Balanced Binary Search Trees
Representation of a Threaded Tree
Kas yra arduino ? Parengė:Karolis Šumskis ir Mokytoja ekspertė Elena Šišenina.
Programų sistemų inžinerija
Simple Network Management Protocol Paprastas tinklo valdymo protokolas
INTERAKTYVIŲ UŽDUOČIŲ KŪRIMO PROGRAMA
البرمجة بلغة الفيجول بيسك ستوديو
Šlapimo nelaikymo korekcija: Vilniaus miesto Universitetinės ligoninės patirtis Dr. Gediminas Mečėjus I-ji Lietuvos uroginekologijos draugijos konferencija,
Antrosios kartos interneto technologijos
Tekstiniai uždaviniai
CS202 - Fundamental Structures of Computer Science II
3-4 klasei Matematika Trupmenos Jurgita Grajauskienė Spec
Programų sistemų testavimas
AVL Trees Lab 11: AVL Trees.
Daugelio dokumentų sąsaja (angl. Multiple document interface)
Asmeninis programų kūrimo procesas (PSP)
Windows Ribbon Framework
Algoritmai ir duomenų struktūros (ADS)
Klaviatūra.
Computer Science 2: Trees
Self-Balancing Search Trees
CS202 - Fundamental Structures of Computer Science II
AVL Tree Chapter 6 (cont’).
More Trees 5/9/2-017 Be able to dry run a program that uses trees
2.4 Mathematical Induction
Simonas Vaicekauskas IT3 grupė
CS202 - Fundamental Structures of Computer Science II
CS202 - Fundamental Structures of Computer Science II
Self-Balancing Search Trees
Presentation transcript:

Algoritmai ir duomenų struktūros (ADS) AVL medžiai Saulius Ragaišis, VU MIF saulius.ragaisis@mif.vu.lt

Problema Dvejetainis paieškos medis (DPM) gali „išsigimti“ (išsibalansuoti), tada paieška jame tampa neefektyvi – blogiausiu atveju ji gali tapti ... (geriausiu atveju paieškos DPM sudėtingumas yra ...). Problemos sprendimo būdai: laikas nuo laiko medį subalansuoti (balansavimas „brangi“ operacija); naudoti specialius (neišsibalansuojančius) medžius (pvz., AVL medžius).

AVL medis Apibrėžimas: AVL medis – tai (besibalansuojantis) dvejetainis paieškos medis, kurio (1) šaknies dešiniojo ir kairiojo pomedžių aukščiai skiriasi daugiausiai vienetu ir (2) abu pomedžiai, savo ruožtu, tai pat yra AVL medžiai. AVL medis buvo pirmas besibalansuojantis medis. Jis buvo pasiūlytas 1962 m. ir gavo vardą iš savo kūrėjų (G. M. Adelson-Velsky ir E. M. Landis). Ar efektyvi paieška AVL medyje?

AVL medžiai

Ne AVL medžiai

Paprastas elementų įterpimas

AVL medžio elementų tipas type Balance_Factor_Type = (LH, EH, RH); { LH : left higher; EH : equal heights; RH : right higher } type AVL_Tree_Type = ^AVL_Tree_Node_Type; type AVL_Tree_Node_Type = record left, right : AVL_Tree_Type; bf : Balance_Factor_Type; info : ... end.

Įterpimas procedure Insert(var root : AVL_Tree_Type; newnode : AVL_Tree_Type; var taller : Boolean); var tallersubtree: Boolean; begin if root = nil then root := newnode; root^.left := nil; root^.right := nil; root^.bf := EH; taller := true; end else with root^ do if newnode^.info.key = info.key then Error else ...

Įterpimas (2) else if newnode^.info.key < info.key then begin Insert(left, newnode, tallersubtree); if tallersubtree then case bf of LH: LeftBalance; EH: begin bf := LH; taller := true end; RH: begin bf := EH; taller := false end else taller := false else ...

Įterpimas (3) else begin Insert(right, newnode, tallersubtree); if tallersubtree then case bf of LH: begin bf := EH; taller := false end; EH: begin bf := RH; taller := true RH: RightBalance; end else taller := false

Balanso atstatymas sukimu į kairę

Sukimo į kairę procedūra procedure RotateLeft(var p: AVL_Tree_Type); {p – šaknis, kurios pomedis yra sukamas} var temp: pointer; begin if p = nil then Error else if p^.right = nil then else begin temp := p^.right; p^.right := temp^.left; temp^.left := p; p := temp; end;

Balanso atstatymas dvigubu pasukimu

Dešinio balansavimo procedūra procedure RightBalance; var x, {šaknies dešinysis pomedis} w: AVL_Tree_Type; {kairysis x^ pomedis} begin x := root^.right; case x^.bf of RH: begin root^.bf := EH; x^.bf := EH; RotateLeft(root); taller := false end; EH: Error;

Dešinio balansavimo procedūra (2) LH: begin w := x^.left; case w^.bf of EH: begin root^.bf := EH; x^.bf := EH end; x^.bf := RH RH: begin root^.bf := LH;

Dešinio balansavimo procedūra (3) w^.bf := EH; RotateRight(x); root^.right := x; RotateLeft(root); taller := false; end end; Procedūros RotateRight ir LeftBalance yra labai panašios į RotateLeft ir RightBalance atitinkamai.

Algoritmo veikimo demonstravimas

Apibendrinimas Didžiausias AVL medžių privalumas, kad jų aukštis visada labai artimas teoriniam minimumui Pabandykime rasti blogiausią atvejį: koks gali būti maksimalus AVL medžio, turinčio n viršūnių, aukštis? Ieškosime AVL medžio, kurio aukštis h, minimalaus viršūnių skaičiaus.

AVL medžio viršūnių skaičius Fh yra nagrinėjamas AVL medis, kurio aukštis h. Fk ir Fd yra jo kairysis ir dešinysis pomedžiai. Vieno iš šių pomedžių, tarkime Fk, aukštis bus (h - 1), o kito (Fd) – (h - 1) arba (h - 2). Kadangi medis Fh turi mažiausią skaičių viršūnių, tai Fd aukštis turi būti (h - 2). Iš čia gauname, kad: |Fh| = |Fh - 1| + |Fh - 2| + 1 Čia |Fh| yra medžio, kurio aukštis h, viršūnių skaičius. Tokie AVL medžiai dar yra vadinami Fibonačio medžiais

Fibonačio medžių pavyzdžiai

AVL medžio maksimalus aukštis Prie gautosios lygybės pridėję po 1, gauname: |Fh| + 1 = (|Fh - 1| + 1) + (|Fh - 2| + 1) |Fh| + 1 yra Fibonačio sekos narys, todėl : |Fh| + 1 ≈ Išreiškus iš šios lygybės h ≈ 1,44 log |Fh|. Tai reiškia, kad pačiu blogiausiu atveju AVL medžio su n viršūnių apytikslis aukštis yra 1,44 log n.

Tikėtinas DPM aukštis Vidutinis palyginimo operacijų skaičius vidutiniame DPM su n viršūnių apytiksliai lygus: Vidutiniam DPM apytiksliai reikia karto 1,39 karto daugiau palyginimo operacijų negu visiškai subalansuotam medžiui.

Klausimai ?