Informationsteknologi Tom Smedsaas 19 augusti 2016

Relevanta dokument
Föreläsning 5 TDDC91,TDDE22,725G97: DALG. Föreläsning i Datastrukturer och algoritmer 18 september 2018

Algoritmer och datastrukturer 2012, fo rela sning 8

Träd Hierarkiska strukturer

Föreläsning 9 Datastrukturer (DAT037)

Föreläsning 6. Sökträd: AVL-träd, Multi-Way -sökträd, B-träd TDDC70/91: DALG. Innehåll. Innehåll. 1 AVL-träd

Datastrukturer. föreläsning 10. Maps 1

Ett generellt träd är. Antingen det tomma trädet, eller en rekursiv struktur: rot /. \ /... \ t1... tn

Föreläsning 2. AVL-träd, Multi-Way -sökträd, B-träd TDDD71: DALG. Innehåll. Innehåll. 1 Binära sökträd

Binära sökträd. Seminarium 9 Binära sökträd Innehåll. Traversering av binära sökträd. Binära sökträd Definition. Exempel på vad du ska kunna

Föreläsning Datastrukturer (DAT036)

Datastrukturer. föreläsning 10. Maps 1

Upplägg. Binära träd. Träd. Binära träd. Binära träd. Antal löv på ett träd. Binära träd (9) Binära sökträd (10.1)

Ännu mera träd: 2-3-träd, B-träd, rödsvarta träd, träd Weiss, avsnitt 4.7, 11.5, 12.2, etc.

Självbalanserande träd AVL-träd. Koffman & Wolfgang kapitel 9, avsnitt 1 2

Lösningar Datastrukturer TDA

Föreläsning 7. Träd och binära sökträd

Datastrukturer som passar för sökning. Föreläsning 10 Innehåll. Inordertraversering av binära sökträd. Binära sökträd Definition

Föreläsning Datastrukturer (DAT036)

Föreläsning 9 Innehåll

Programkonstruktion och. Datastrukturer

Föreläsning 4 Datastrukturer (DAT037)

Föreläsning 13. Träd

Föreläsning 10 Innehåll. Prioritetsköer och heapar. ADT Prioritetskö. Interface för Prioritetskö. Exempel på vad du ska kunna

Datastrukturer som passar för sökning. Föreläsning 11 Innehåll. Binära sökträd Definition. Inordertraversering av binära sökträd

Föreläsning 10 Innehåll. Diskutera. Inordertraversering av binära sökträd. Binära sökträd Definition

13 Prioritetsköer, heapar

Föreläsning 10 Innehåll

Föreläsning 5. Träd Binära träd Binärt sökträd som ADT Implementering av binärt sökträd Travestera binärt sökträd Sökning Insättning/borttagning

Självbalanserande AVL-träd Weiss, avsnitt 4.4

ADT Prioritetskö. Föreläsning 13 Innehåll. Prioritetskö vs FIFO-kö. Prioritetskö Exempel på användning. Prioritetsköer och heapar

Ekvivalensrelationer

Seminarium 13 Innehåll

TDDI16 Datastrukturer och algoritmer. Prioritetsköer, heapar, Union/Find

Linjärt minne. Sammanhängande minne är ej flexibelt. Effektivt

Datastrukturer. föreläsning 9. Maps 1

Föreläsning 4 Datastrukturer (DAT037)

Föreläsning 11 Innehåll. Diskutera. Binära sökträd Definition. Inordertraversering av binära sökträd

Föreläsning 10 Datastrukturer (DAT037)

ADT Prioritetskö. Föreläsning 12 Innehåll. Prioritetskö. Interface för Prioritetskö. Prioritetsköer och heapar

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 8 Erik Nilsson, Institutionen för Datavetenskap, LiU

Datastrukturer, algoritmer och programkonstruktion (DVA104, HT 2014) Föreläsning 5

Datastrukturer och algoritmer

Inom datalogin brukar man använda träd för att beskriva vissa typer av problem. Om man begränsar sig till träd där varje nod förgrenar sig högst två

Innehåll. Föreläsning 12. Binärt sökträd. Binära sökträd. Flervägs sökträd. Balanserade binära sökträd. Sökträd Sökning. Sökning och Sökträd

Tentamen Datastrukturer för D2 DAT 035

DAI2 (TIDAL) + I2 (TKIEK)

Datastrukturer. Föreläsning 5. Maps 1

Föreläsning 13 Innehåll

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Optimala koder. Övre gräns för optimala koder. Gränser. Övre gräns för optimala koder, forts.

Algoritmer, datastrukturer och komplexitet

Optimala koder. Det existerar förstås flera koder som har samma kodordsmedellängd. Enklaste fallet är att bara byta 0:or mot 1:or.

Algoritmanalys. Inledning. Informationsteknologi Malin Källén, Tom Smedsaas 1 september 2016

Träd och koder. Anders Björner KTH

Tentamen TEN1 HI

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 9 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Programmeringsmetodik DV1 Programkonstruktion 1. Moment 8 Om abstrakta datatyper och binära sökträd

Algoritmer, datastrukturer och komplexitet

3. Toppkvinnor på hög Låt lådan och de två kvinnornas famnar utgöra stackarna L, K1 respektive K2. Från början finns alla kort i L.

TDIU01 / 725G

Tabeller. Programkonstruktion. Moment 8 Om abstrakta datatyper och binära sökträd. Implementering av tabellen. Operationer på tabellen

Tentamen med lösningsförslag Datastrukturer för D2 DAT 035

Föreläsning Datastrukturer (DAT037)

Lösningsförslag till tentamen Datastrukturer, DAT037,

Tentamen Datastrukturer, DAT037 (DAT036)

F5: Debriefing OU2, repetition av listor, träd och hashtabeller. Carl Nettelblad

Datastrukturer. föreläsning 9. Maps 1

Sökning. Översikt. Binärt sökträd. Linjär sökning. Binär sökning. Sorterad array. Linjär sökning. Binär sökning Hashtabeller

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

Datastrukturer i Haskell

BINÄRA TRÄD. (X = pekarvärdet NULL): struct int_bt_node *pivot, *ny; X X X 12 X X 12 X X -3 X X

TENTAMEN: Algoritmer och datastrukturer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Föreläsning 9 Innehåll

Översikt. Stegvis förfining. Stegvis förfining. Dekomposition. Algoritmer. Metod för att skapa ett program från ett analyserat problem

Tentamen kl Uppgift 4. Uppgift 5

Tommy Färnqvist, IDA, Linköpings universitet

Lösningsförslag till tentamen Datastrukturer, DAT037,

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18

Shannon-Fano-Elias-kodning

Datastrukturer i kursen. Föreläsning 8 Innehåll. Träd rekursiv definition. Träd

TENTAMEN: Algoritmer och datastrukturer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Föreläsning 5 Datastrukturer (DAT037)

TDDC30/725G63. Objektorienterad programmering i Java, datastrukturer och algoritmer

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Lösningsförslag till tentamen

Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6

Inlämningsuppgiften. Föreläsning 9 Innehåll. Träd. Datastrukturer i kursen

Lutande torn och kluriga konster!

Tabeller. Programkonstruktion. Moment 8 Om abstrakta datatyper och binära sökträd. Specifikationer för tabellfunktionerna. Operationer på tabellen

Lösningsförslag för tentamen i Datastrukturer (DAT037) från

Fredag 10 juni 2016 kl 8 12

Föreläsning Datastrukturer (DAT036)

Kappa 2014, lösningsförslag på problem 5

Vad har vi pratat om i kursen?

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

Teoretisk del. Facit Tentamen TDDC (6)

Tentamen (del 2) (4 högskolepoäng) i Programkonstruktion och datastrukturer (1DL201)

Algoritmer och datastrukturer 2012, föreläsning 6

Två fall: q Tom sekvens: () q Sekvens av element: (a b c) ; (sum-rec '(2 4 6)) = 12. q Första elementet uppfyller vissa villkor: (2 a b c)

Transkript:

Informationsteknologi Tom Smedsaas 19 augusti 016 VL-träd Definition Ett VL-träd är ett binärt sökträd där det för varje nod gäller att skillnaden i höjd mellan nodens vänster och höger subträd är högst 1. VL-träd kallas också för höjdbalanserade träd. Vi skall här visa att höjden i ett VL-träd med n noder är Θ(logn) vilket garanterar att en sökning aldrig tar mer tid än så. Vi skall också beskriva en inläggningsalgoritm som underhåller VL-egenskapen och som också tar Θ(log n) tid. Inlägg i VL-träd Varje nod förses med en balansindikator som anger skillnaden i höjd mellan höger och vänster subträd. Tillåtna värde är således -1 (vänster subträd högre än höger subträd), 0 (subträden är lika höga) och +1 (höger subträd är högre än vänster subträd). Ett inlägg i ett VL-träd börjar som ett vanligt BST-inlägg dvs man söker sig längs en väg från roten ner till den plats som det na elementet skall ha. Den na noden blir som vanligt ett löv i trädet. Därefter följer man samma väg tillbaka upp mot roten. Så länge man passerar noder med balansvärdet 0 skall värdet ändras till 1 eller -1. Den första nod man påträffar som har balansfält skilt från noll kallar vi pivot-nod. Om inlägget gjordes i pivotnodens lägre subträd har balansen förbättrats. Balansfältet sättes till noll och det hela är klart ingenting behöver göras ovanför denna punkt. Om inlägget gjordes i det högre av subträden så måste VL-egenskapen återställas genom en omstrukturering. ntag att inlägget gjordes i det vänstra subträdet. Fallet med inlägg i höger subträd hanteras smmetriskt) Den na noden kan då ha hamnat antingen i pivotnodens vänsterbarns vänstra subträd (kallat i figuren nedan) eller i dess högra subträd (kallat T i figuren nedan). Situationen beskrivs då av följande figur där x är na noden i fall 1 och är den na i fall.: 1

0-1 pivotnod T h h 1 x (Balansvärdena i figuren är de värden som gällde innan inlägget gjordes.) Vi tittar först på hur vi skall hantera fallet att inlägget gjordes i. Problemet löse då genom att lfta upp noden till pivotnodens plats medan pivotnoden () åker ner ett steg åt höger. På det sättet återställs det brutna balanskriteriet vid pivotnoden. Dessutom bevaras den inbördes ordningen mellan noderna vilket är nödvändigt för behålla BST-egenskapen. Denna operation kallas för en enkel högerrotation och resulterar i följande situation: T x Observera att höjden av trädet under pivotnoden (noden som nu innehåller

är h + dvs detta delträd har samma höjd som det hade före inlägget. Detta innebär att ovanför denna punkt behövs ingen omstrukturering göras och inga balansfält modifieras. Vi skall nu se på det andra fallet när den na noden kom i T. För att hantera detta måste vi öka upplösningen i figuren så att vi även ser roten till T som vi kallar B: -1 0 B T 1 T Det spelar ingen roll i vilket av de två subträden T 1 eller T den na noden hamnar båda fallen hanteras med en dubbel högerrotation som lfter upp B till pivotnodens plats: B T 1 T 3

Även här är höjden av trädet med pivotnoden som rot oförändrad efter inlägget så att ingenting behöver göras högre upp i trädet. Hur högt kan ett VL-träd bli? För att se vad den den största höjden i ett VL-träd med n noder kan bli betraktar vi en speciell följd av maximalt dåliga VL-träd. Låt F h var ett VL-träd med h nivåer konstruerat med så få noder som möjligt. Således är F 0 det tomma trädet och F 1 trädet med en nod. Därefter kommer träd med följande utseende: Träden är inte unika; vi har här valt att alltid göra det vänstra subträdet en steg högre än det högra (förutom F 0 och F 1 ). Det betder att det F h kan konstrueras med hjälp av F h 1 och F h enligt: F h 1 F h Träden kallas av naturliga skäl Fibonacciträd Låt f h beteckna antalet noder i F h. Vi kan då uttrcka antalet noder med differensekvationen f h = 1+f h 1 +f h (1) Låt n h vara antalet noder i ett godtckligt VL-träd med h nivåer. Då gäller naturligtvis n h f h () Om vi kan uttrcka f h explicit så ger detta en relation mellan antalet nivåer h (dvs höjden) och antalet noder i ett VL-träd. (Om vi t ex visste att f h = h så skulle det innebära att n h h dvs h logn h. Riktigt så enkelt och bra är det dock inte...) Om man inte känner lösningen till ekvationen (1) eller inte behärskar teknik för att lösa den kan man ändå komma fram till det väsentliga resultatet genom en ganska enkel uppskattning. 4

Om vi skall kunna använda uppskattningen av f h i relationen () så måste uppskattningen göras nedåt dvs vi skall skaffa en undre gräns för f h. Eftersom f h är växande (fler nivåer kräver naturligtvis fler noder) så gäller f h = 1+f h 1 +f h 1+f h +f h dvs f h 1+f h (3) Denna relation kan lösas genom teleskopering dvs genom att upprepa den ett lämpligt antal gånger: f h 1+f h 1+(1+f h 4 ) = = 1++4f h 4 1++4(1+f h 6 ) = = 1++4+8f h 6 1++4+8(1+f h 8 ) = = 1++4+ + k 1 + k f h k = = k 1+ k f h k Välj k sådant att h k = 1 dvs k = (h 1)/. Eftersom f 1 = 1 får vi då n h f h k 1+ k f 1 = k+1 1 = h+1 log (n h +1) h+1 h log (n h +1) 1 (4) Slutsats: Ett VL-träd kan inte bli mer än dubbelt så högt som det lägsta möjliga binära trädet. Därav följer att sökning i ett VL-träd med n noder tar garanterat O(log n) tid. Eftersom in- och uttagsalgoritmerna bara rör noder längs vägen från roten till den ninlagda roten kräver även högst dessa O(logn) tid. Genom att lösa ekvationen (1) exakt så kan uppskattningen (4) skärpas till h 1.44log (n h +)+O(1) (5) Detta beskriver alltså hur många nodbesök man behöver göra i värsta fall i det värsta VL-trädet att jämföras med de 1.396log n försök man behöver göra i genomsnitt i det genomsnittliga binära sökträdet. 5