AVL-puut. eräs tapa tasapainottaa binäärihakupuu siten, että korkeus on O(log n) kun puussa on n avainta

Samankaltaiset tiedostot
Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

58131 Tietorakenteet (kevät 2008) 1. kurssikoe, ratkaisuja

v 1 v 2 v 3 v 4 d lapsisolmua d 1 avainta lapsen v i alipuun avaimet k i 1 ja k i k 0 =, k d = Sisäsolmuissa vähint. yksi avain vähint.

3. Hakupuut. B-puu on hakupuun laji, joka sopii mm. tietokantasovelluksiin, joissa rakenne on talletettu kiintolevylle eikä keskusmuistiin.

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

58131 Tietorakenteet ja algoritmit (kevät 2016) Ensimmäinen välikoe, malliratkaisut

58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe ratkaisuja (Jyrki Kivinen)

Binäärihaun vertailujärjestys

B + -puut. Kerttu Pollari-Malmi

Tietorakenteet, laskuharjoitus 6,

Kierros 4: Binäärihakupuut

CS-A1140 Tietorakenteet ja algoritmit

Algoritmi on periaatteellisella tasolla seuraava:

Koe ma 1.3 klo salissa A111, koeaika kuten tavallista 2h 30min

Tietorakenteet, laskuharjoitus 7, ratkaisuja

A TIETORAKENTEET JA ALGORITMIT

Algoritmit 2. Luento 2 Ke Timo Männikkö

Algoritmit 1. Luento 7 Ti Timo Männikkö

58131 Tietorakenteet ja algoritmit (syksy 2015) Toinen välikoe, malliratkaisut

Algoritmit 2. Luento 5 Ti Timo Männikkö

Algoritmit 1. Luento 8 Ke Timo Männikkö

Algoritmit 2. Luento 5 Ti Timo Männikkö

Algoritmit 2. Luento 2 To Timo Männikkö

Johdatus graafiteoriaan

4. Joukkojen käsittely

58131 Tietorakenteet (kevät 2009) Harjoitus 6, ratkaisuja (Antti Laaksonen)

Fibonacci-kasoilla voidaan toteuttaa samat operaatiot kuin binomikasoilla.

Luku 7. Verkkoalgoritmit. 7.1 Määritelmiä

14 Tasapainotetut puurakenteet

(a) L on listan tunnussolmu, joten se ei voi olla null. Algoritmi lisäämiselle loppuun:

1 Puu, Keko ja Prioriteettijono

7. Tasapainoitetut hakupuut

Miten käydä läpi puun alkiot (traversal)?

Olkoon seuraavaksi G 2 sellainen tasan n solmua sisältävä suunnattu verkko,

Tarkennamme geneeristä painamiskorotusalgoritmia

Tehtävän V.1 ratkaisuehdotus Tietorakenteet, syksy 2003

Ei-yhteydettömät kielet [Sipser luku 2.3]

Algoritmit 2. Luento 4 To Timo Männikkö

5. Keko. Tietorakenne keko eli kasa (heap) on tehokas toteutus abstraktille tietotyypille prioriteettijono, jonka operaatiot ovat seuraavat:

58131 Tietorakenteet ja algoritmit (kevät 2013) Kurssikoe 1, , vastauksia

Pinot, jonot, yleisemmin sekvenssit: kokoelma peräkkäisiä alkioita (lineaarinen järjestys) Yleisempi tilanne: alkioiden hierarkia

Algoritmit 2. Luento 7 Ti Timo Männikkö

58131 Tietorakenteet ja algoritmit (kevät 2014) Uusinta- ja erilliskoe, , vastauksia

verkkojen G ja H välinen isomorfismi. Nyt kuvaus f on bijektio, joka säilyttää kyseisissä verkoissa esiintyvät särmät, joten pari

Algoritmit 2. Luento 6 To Timo Männikkö

Induktiotodistus: Tapaus n = 0 selvä; ol. väite pätee kun n < m.

Algoritmit 2. Luento 4 Ke Timo Männikkö

58131 Tietorakenteet Erilliskoe , ratkaisuja (Jyrki Kivinen)

Luku 8. Aluekyselyt. 8.1 Summataulukko

lähtokohta: kahden O(h) korkuisen keon yhdistäminen uudella juurella vie O(h) operaatiota vrt. RemoveMinElem() keossa

6. Hakupuut. Hakupuu (engl. search tree) on listaa huomattavasti edistyneempi tapa toteuttaa abstrakti tietotyyppi joukko

ja λ 2 = 2x 1r 0 x 2 + 2x 1r 0 x 2

Pienin virittävä puu (minimum spanning tree)

Algoritmit 1. Luento 6 Ke Timo Männikkö

Algoritmit 1. Luento 5 Ti Timo Männikkö

isomeerejä yhteensä yhdeksän kappaletta.

Eräs keskeinen algoritmien suunnittelutekniikka on. Palauta ongelma johonkin tunnettuun verkko-ongelmaan.

Johdantoa INTEGRAALILASKENTA, MAA9

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

(p j b (i, j) + p i b (j, i)) (p j b (i, j) + p i (1 b (i, j)) p i. tähän. Palaamme sanakirjaongelmaan vielä tasoitetun analyysin yhteydessä.

Induktiota käyttäen voidaan todistaa luonnollisia lukuja koskevia väitteitä, jotka ovat muotoa. väite P(n) on totta kaikille n = 0,1,2,...

Koe ma 28.2 klo salissa A111, koeaika kuten tavallista 2h 30min

Diskreetin matematiikan perusteet Laskuharjoitus 2 / vko 9

Testaa: Vertaa pinon merkkijono syötteeseen merkki kerrallaan. Jos löytyy ero, hylkää. Jos pino tyhjenee samaan aikaan, kun syöte loppuu, niin

Valitaan alkio x 1 A B ja merkitään A 1 = A { x 1 }. Perinnöllisyyden nojalla A 1 I.

f(n) = Ω(g(n)) jos ja vain jos g(n) = O(f(n))

Miten osoitetaan joukot samoiksi?

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

Koodausteoria, Kesä 2014

Näin ollen saadaan tulos rad(g) diam(g). Toisaalta huomataan, että verkon G kaikilla solmuilla x ja y pätee kolmioepäyhtälön nojalla havainto

= 5! 2 2!3! = = 10. Edelleen tästä joukosta voidaan valita kolme särmää yhteensä = 10! 3 3!7! = = 120

Vaihtoehtoinen tapa määritellä funktioita f : N R on

JOHDATUS LUKUTEORIAAN (syksy 2017) HARJOITUS 3, MALLIRATKAISUT

58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe malliratkaisut ja arvosteluperusteet

Luku 4. Tietorakenteet funktio-ohjelmoinnissa. 4.1 Äärelliset kuvaukset

V. V. Vazirani: Approximation Algorithms, luvut 3-4 Matti Kääriäinen

Esimerkkejä polynomisista ja ei-polynomisista ongelmista

Diskreetin matematiikan perusteet Esimerkkiratkaisut 3 / vko 10

A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä.

Rekursio. Funktio f : N R määritellään yleensä antamalla lauseke funktion arvolle f (n). Vaihtoehtoinen tapa määritellä funktioita f : N R on

Tietorakenteet ja algoritmit Hakurakenteet Ari Korhonen

Tietorakenteet, laskuharjoitus 3, ratkaisuja

Johdatus diskreettiin matematiikkaan Harjoitus 5, Ratkaise rekursioyhtälö

Johdatus matematiikkaan

A TIETORAKENTEET JA ALGORITMIT KORVAAVAT HARJOITUSTEHTÄVÄT 3, DEADLINE KLO 12:00

Turingin koneen laajennuksia

Johdatus diskreettiin matematiikkaan (syksy 2009) Harjoitus 3, ratkaisuja Janne Korhonen

1 Kertaus. Lineaarinen optimointitehtävä on muotoa:

1 sup- ja inf-esimerkkejä

811312A Tietorakenteet ja algoritmit III Lajittelualgoritmeista

Approbatur 3, demo 1, ratkaisut A sanoo: Vähintään yksi meistä on retku. Tehtävänä on päätellä, mitä tyyppiä A ja B ovat.

SAT-ongelman rajoitetut muodot

Algoritmit 2. Luento 6 Ke Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö

14. Juurikunnat Määritelmä ja olemassaolo.

2.2.1 Ratkaiseminen arvausta sovittamalla

Johdatus graafiteoriaan

1.1 Tavallinen binäärihakupuu

Luonnollisen päättelyn luotettavuus

10. Painotetut graafit

Transkriptio:

AVL-puut eräs tapa tasapainottaa binäärihakupuu siten, että korkeus on O(log n) kun puussa on n avainta pohjana jo esitetyt binäärihakupuiden operaatiot tasapainotus vie pahimmillaan lisäajan lisäys- ja poisto-operaatioissa siis kaikki operaatiot pahimmassa tapauksessa ajassa O(log n) monimutkaisin tällä kurssilla esitettävä tietorakenne pitää ymmärtää, mihin ja miten näitä voi käyttää pitää ymmärtää tasapainotuksen perusajatus ja menetelmät tavoite ei ole kurssin jälkeen muistaa pseudokoodin yksityiskohtia tai osata koodata AVL-puut 1

Tasapainotuksen perusajatus pidetään puu matalana jakamalla avaimet mahdollisimman tasaisesti vasemmalle ja oikealle huom. pelkästään juuren tarkasteleminen ei riitä, saman pitää toteutua myös alipuissa ei kuitenkaan kannata yrittää pitää puuta esim. melkein täydellisenä, koska rakenteen korjailemiseen menisi aivan liikaa aikaa AVL-puissa tasapainotus perustuu alipuiden korkeuserojen minimoimiseen kun tasapainoehto rikkoutuu, se voidaan palauttaa suorittamalla pari yksinkertaista operaatiota epätasapainoisen solmun lähiympäristössä 2

AVL-puissa tasapainotus perustuu alipuiden korkeuteen muistetaan, että solmun korkeus on kaarten lukumäärä solmusta syvimpään lehteen sen alla puun (tai alipuun) korkeus on sen juuren korkeus erityisesti yksisolmuisen puun korkeus on nolla tämän kanssa yhteensopivasti sovimme, että tyhjän puun korkeus on -1 liitetään solmuun x kenttä x. height siis x. height = max(x. left. height, x. right. height) + 1 Puu toteuttaa AVL-tasapainoehdon jos kaikilla solmuilla vasemman ja oikean alipuun korkeuksien ero on korkeintaan yksi. 3

Sanomme puuta AVL-puuksi, jos se toteuttaa AVL-tasapainoehdon. Tällöin sanomme myös, että puu on tasapainossa. Lause 6.3 Jos AVL-puun korkeus on h, niin siinä on korkeintaan F h+3 1 solmua, missä F n on n:s Fibonaccin luku. Korollaari n-solmuisen AVL-puun korkeus on O(log n). Tässä siis käytetään Fibonaccin lukuja F 0 = 0 F 1 = 1 F n = F n 1 + F n 2 kun n 2. Kaava ( (1 F n = 1 ) n + 5 5 2 ( ) n ) 1 5 2 on helppo todistaa oikeaksi induktiolla. Sen johtaminen sujuu helpoimmin käyttämällä generoivaa funktiota joka ei kuulu tämän kurssi asioihin. 4

Mielikuvan saamiseksi todetaan, että 1/ 5 0,447 (1 + 5)/2 1,618 (1 5)/2-0,618 < 1 joten karkeana approksimaationa voidaan todeta F n 0,447 (1,618) n. 5

Korollaarin todistushahmotelma Olkoon AVL-puun korkeus h ja solmujen lukumäärä n. Lauseen perusteella siis n F h+3 1. Tehdään loput laskut vain likimääräisesti. Siis suunnilleen pätee n 0,447 1,618 h+3 1 2,236 (n + 1) 1,618 h+3 log 2 (2,236) + log 2 (n + 1) (h + 3) log 2 1,618 0,694 (h + 3) h 1,44 (log 2 (n + 1) + 1,16) 3 = O(log n). 6

Lauseen 6.3 todistus: Induktio puun korkeuden suhteen. Olkoon S(h) pienin solmujen lukumäärä AVL-puussa, jonka korkeus on h. Määritelmien mukaan S( 1) = 0 = F 3+( 1) 1 ja S(0) = 1 = F 3+0 1. Olkoon nyt T AVL-puu, jonka korkeus on h 1. Oletetaan, että väite pätee pienemmillä korkeuksilla kuin h. Puussa T on ainakin juuri yksi alipuu jonka korkeus h 1 toinen alipuu jonka korkeus h 1 tai h 2. Solmuja on siis vähimmillään 1 + S(h 1) + S(h 2). Induktio-oletuksen perusteella 1 + S(h 1) + S(h 2) 1 + (F h 1+3 1) + (F h 2+3 1) = F h+2 + F h+1 1 = F h+3 1. 7

AVL-puun insert Perusidea: oletetaan, että ennen lisäystä AVL-tasapainoehto on voimassa suorita lisäys kuten binäärihakupuun perusversiossa korjaa muuttuneet height-arvot jos jossain solmussa tasapainoehto rikkoutui, korjaa tilanne järjestelemällä alipuita Huomioita: height-arvot voivat muuttua vain lisätystä solmusta juureen johtavalla polulla siis tasapainoehtokaan ei voi mennä rikki muuten kuin tämän polun solmuilla Osoittautuu että tasapaino saadaan kaikissa mahdollisissa tapauksissa korjatuksi suorittamalla yksi tai kaksi kiertoa kierto on vakioaikainen toimenpide, jossa yhden solmun, sen lapsen ja lapsen alipuiden linkitystä hieman muutetaan niin että hakupuuominaisuus säilyy mutta korkeudet hieman muuttuvat 8

Vaikea kohta algoritmissa on sen analysoiminen, millä eri tavoilla puuhun on voinut syntyä epätasapainoinen solmu jos epätasapainoisia solmuja on useita, olkoon p niistä lähinnä lisättyä solmua ennen lisäystä p, p. left ja p. right olivat kaikki tasapainossa oletuksen nojalla p. left ja p. right ovat tasapainossa vielä lisäyksen jälkeenkin, mutta p ei ole lisäyksen seuraksena jollain alipuista p. left. left p. left. right p. right. left p. right. right korkeus on kasvanut yhdellä osoittautuu, että kutakin neljää tapausta varten on oma melko yksinkertainen menettelynsä jolla tasapaino taatusti palautuu (käydään läpi taululla; yksityiskohdat varsinaisessa luentomonisteessa) 9

AVL-puun insert: yhteenveto lisää solmu kuten binäärihakupuun perusversioon palaa lisätystä solmusta juurta kohti päivittäen height-arvoja kun löytyy solmu p jossa tasapainoehto ei päde, tasapainota: jos lisäys alipuussa p. left. left niin tee oikea kierto jos lisäys alipuussa p. left. right niin tee vasen-oikea kaksoiskierto jos lisäys alipuussa p. right. left niin tee oikea-vasen kaksoiskierto jos lisäys alipuussa p. right. right niin tee vasen kierto nyt operaation on valmis! 10

AVL-puun delete Perusajatus: oletetaan taas, että ennen poistoa puu on tasapainossa tee poisto kuten binäärihakupuun perusversiossa samaan tapaan kuin insertissä seuraamme polkua kohti juurta ja korjaamme epätasapainot kierroilla liikkeelle lähdetään puusta poistetun solmun vanhemmasta huomaa että poistettu solmu ei aina ole sama solmu jossa poistettava avain alunperin sijaitsi (kaksilapsisen solmun tapaus deletessä) toisin kuin insertissä, tasapainotusta voidaan joutua tekemään monessa eri solmussa 11

tilanne voidaan taas jakaa erikoistapauksiin sen mukaan, mihin neljästä lapsen alipuusta poisto on kohdistunut oikean tasapainotustoimenpiteen löytämiseksi voi olla hyödyllistä miettiä tilannetta siltä kannalta, mikä neljästä alipuusta on liian korkea, ja purkaa tilanne ikään kuin se olisi syntynyt lisäyksen tuloksena osoittautuu taas, että samat neljä operaatiota kuin insertin tapauksessa riittävät korjaamaan kaikki mahdolliset tilanteet toisin kuin insertin tapauksessa, tasapainotetun solmun korkeus voi muuttua voi siis syntyä uusia epätasapainotilanteita puun ylempiin solmuihin, joten pitää jatkaa kohti juurta ja tarvittaessa tasapainottaa uudelleen joka tapauksessa kiertoja tulee enintään O(h) = O(log n) kappaletta 12

AVL-puut: yhteenveto AVL-tasapainoehto takaa, että puun korkeus on O(log n) siis kaikki joukko-operaatiot toimivat pahimmassa tapauksessa ajassa O(log n) tasapainoehdon pitämiseksi voimassa insert- ja delete-operaatioiden yhteydessä tehdään lisäksi kiertoja kierto on vakioajassa tapahtuva toimenpide joka korjaa tasapainoa yhdessä solmussa ja sen lapsissa kiertoja tehdään pahimmassa tapauksessa jokaisessa solmussa muuttuneen kohdan ja puun juuren välillä siis myös insert ja delete tasapainotuksineen toimivat ajassa O(log n) 13