Föreläsning 10 Datastrukturer (DAT037)

Relevanta dokument
Föreläsning 9 Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT036)

Föreläsning Datastrukturer (DAT036)

Föreläsning 4 Datastrukturer (DAT037)

Föreläsning 13 Datastrukturer (DAT037)

Föreläsning 13 Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT037)

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

Datastrukturer. föreläsning 10. Maps 1

Föreläsning 9 Innehåll

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

Lösningsförslag till tentamen Datastrukturer, DAT037,

Datastrukturer. föreläsning 10. Maps 1

Föreläsning Datastrukturer (DAT036)

Föreläsning 3 Datastrukturer (DAT037)

Föreläsning 4 Datastrukturer (DAT037)

Tentamen Datastrukturer (DAT036)

Föreläsning 2 Datastrukturer (DAT037)

Lösningsförslag till tentamen Datastrukturer, DAT037 (DAT036), Tiden det tar att utföra en iteration av loopen är oberoende av värdet på

Föreläsning 2 Datastrukturer (DAT037)

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

Länkade strukturer, parametriserade typer och undantag

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

Föreläsning 5 Datastrukturer (DAT037)

Tentamen Datastrukturer (DAT036)

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

Tentamen Datastrukturer (DAT036)

Föreläsning 3 Datastrukturer (DAT037)

Lösningsförslag till tentamen i EDA690 Algoritmer och Datastrukturer, Helsingborg

Tentamen Datastrukturer (DAT037)

Programmering i C++ EDA623 Dynamiska datastrukturer. EDA623 (Föreläsning 11) HT / 31

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

Föreläsning 10 Innehåll

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

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

Föreläsning Datastrukturer (DAT037)

Tentamen Datastrukturer, DAT037 (DAT036)

Föreläsning 6 Datastrukturer (DAT037)

Trädstrukturer och grafer

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

Dugga Datastrukturer (DAT036)

DAI2 (TIDAL) + I2 (TKIEK)

BST implementering, huvudstruktur

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

Lösningsförslag till exempeltenta 1

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

13 Prioritetsköer, heapar

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

Lösningsförslag till tentamen i EDAA01 programmeringsteknik fördjupningkurs

Föreläsning 9 Innehåll

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

Algoritmer och datastrukturer 2012, fo rela sning 8

Algoritmer och datastrukturer 2012, föreläsning 6

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

Algoritmer och datastrukturer

Föreläsning 14 Innehåll

Föreläsning Datastrukturer (DAT036)

Tentamen Datastrukturer, DAT037 (DAT036)

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

Föreläsning 1 Datastrukturer (DAT037)

Programmering i C++ EDAF30 Dynamiska datastrukturer. EDAF30 (Föreläsning 11) HT / 34

Föreläsning 11 Datastrukturer (DAT037)

Datastrukturer. föreläsning 9. Maps 1

Seminarium 13 Innehåll

Föreläsning Datastrukturer (DAT036)

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

Föreläsning Datastrukturer (DAT037)

Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning.

Tentamen Datastrukturer för D2 DAT 035

Datastrukturer. föreläsning 3. Stacks 1

Föreläsning 2. Länkad lista och iterator

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

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

Tentamen Datastrukturer D DAT 035/INN960

Tentamen Datastrukturer (DAT036)

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

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.

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista

Föreläsning 7 Datastrukturer (DAT037)

Träd Hierarkiska strukturer

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

Föreläsning 13 Innehåll

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

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

Föreläsning 2. Länkad lista och iterator

Tentamen i Algoritmer & Datastrukturer i Java

Tentamen'('Datastrukturer,'algoritmer'och'programkonstruktion.'

Lösningar Datastrukturer TDA

Datastrukturer. Sammanfattning och Referenshäfte. Guldbrand, Eric Johansson, Algot

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

Exempeltenta GruDat 2002/2003

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

Föreläsning Datastrukturer (DAT037)

Klassen BST som definierar binära sökträd med tal som nycklar och enda data. Varje nyckel är unik dvs förekommer endast en

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

Lösningsförslag till tentamen Datastrukturer, DAT037,

Datastrukturer. föreläsning 6. Maps 1

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista Läsanvisningar och uppgifter

Tentamen Datastrukturer D DAT 035/INN960

Transkript:

Föreläsning 10 Datastrukturer (DAT037) Fredrik Lindblad 1 29 november 2017 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt. Se http://www.cse.chalmers.se/edu/year/2015/course/dat037 1

Innehåll 2 Splay-träd Prefixträd Skip-listor

Splay-träd 3

Splay-träd 4 Sökträd, inget invariant för balansering. självbalanserande Ingen garanti att h = O(logn). Idé: För upp den åtkomna noden till roten på ett visst sätt. Detta ger O(logn) amorterat. Att visa detta är komplicerat. Dessutom går det snabbt att hitta nyligen åtkomna element igen. Enkel omstrukturering kan vara bättre i praktiken än balanserade träd.

Splay-träd Vid sökning(!), insättning, urtag splayas djupast åtkomna noden upp till roten. Tre fall: zig, zig-zig, zig-zag. Utförs tills noden är rot. Zig: enkelrotation, görs om föräldern är roten. Zig-zig: två enkelrotationer åt samma håll, görs om noden och föräldern är barn på samma sida. Zig-zag: två enkelrotationer åt olika håll (på samma sätt som vänster-högerfallet för AVL-träd), görs om noden och föräldern är barn på olika sidor. Animerat: https://www.cs.usfca.edu/ ~galles/visualization/splaytree.html 5

Prefixträd 6

Prefixträd (tries) 7 Kan implementera mängder och avbildningar. Nycklar: strängar. Varje nod kan ha ett barn för varje tecken i alfabetet. n:te nivån motsvarar n:te tecknet.

Prefixträd (tries) 8 Träd med tecken på kanterna. Medlem(boolean)/ Värde(V). Map från p alfabet till a o barn... Löv är r true/har. värde. { "", "apa", "apor", "al", "ar", "arg", "ark", "arm" }:. a. l.. r g. k. m.

Prefixträd (tries) 9 Några alternativ för Map i noderna: Array Enkellänkad lista AVL-träd Storlek Θ( Σ ) Θ(c) Θ(c) Sökning Θ(1) O(c) O(log c) Insättning O( Σ ) O(c) O(log c) Måtten gäller per nod. Σ: Alfabetet (0, 1,, Σ 1). c: Antalet barn (c Σ ).

10 Vad är värstafallstidskomplexiteten för att testa medlemskap av en sträng i en mängd som innehåller n strängar? Varje sträng har längd l, prefixträdet använder arrayer, och hashfunktionen har tidskomplexiteten Θ(l). Hashtabell: O(l) eller O(ln). Prefixträd: O(l) eller O(ln). AVL-träd: O(log n) eller O(l log n).

10 Vad är värstafallstidskomplexiteten för att testa medlemskap av en sträng i en mängd som innehåller n strängar? Varje sträng har längd l, prefixträdet använder arrayer, och hashfunktionen har tidskomplexiteten Θ(l). Hashtabell: O(l) eller O(ln). Prefixträd: O(l) eller O(ln). AVL-träd: O(log n) eller O(l log n). Svar: Hashtabell: En hink: O(ln). O(l) med perfekt hashfunktion. Prefixträd: O(l). AVL-träd: O(l log n).

Skipplistor 11

Skipplistor 12 Alternativ till balanserade sökträd. Randomiserad datastruktur.

Skipplistor 13 Sorterad länkad lista: långsam sökning. Kanske kan lägga till fler länkar. Om nod i2 k har länk till nod (i + 1)2 k : snabb sökning, långsam insättning. Höjd (maximalt antal länkar från en nod): Θ(log n). member/find-max: O(log n). insert/delete-min: O(n). Inte bra. Måste i värsta fall ändra på höjden på alla noder.

Skipplistor 14. 0 1 2 3 4 5 6 7 8

Skipplistor 15 Skipplistor: Samma idé, men slumpmässig struktur (samt vaktpost av maximal höjd i början). Insättning: Slumpmässig höjd på noden. Stanna på höjd 1 med sannolikhet 1 p (0 < p < 1). Stanna på höjd 2 med sannolikhet 1 p.

Skipplistor 16 Sannolikhet för höjd h: P (h) = (1 p)p h 1. Förväntad höjd: h=1 hp (h) = 1 1 p. Rekommenderade val av p: 1/4, 1/2.

17 I en skipplista med n noder, vad är det förväntade antalet noder med höjd h (exklusive vaktposten)? pn h 1. n(1 p)p h 1. np h 1. n. n(1 p) h 1.

17 I en skipplista med n noder, vad är det förväntade antalet noder med höjd h (exklusive vaktposten)? pn h 1. n(1 p)p h 1. np h 1. n. n(1 p) h 1. Svar: np h 1

Skipplistor 18 Förväntad tidskomplexitet för insert, member, delete, för konstant p: O(log n). Gå igenom elementen i sorterad ordning: Θ(n). I praktiken: Maxhöjd log 1/p N, där N är listans största tänkbara storlek.

19 Iterator för sökträd

Iterator för sökträd 20 Här kommer ett exempel till på en iterator, denna gång för inorder-genomlöpning av ett binärt träd.

Ex.: Iter. för BST som genomlöper sorterat public class BinarySearchTree <A extends Comparable<? super A>> { private class Node { A contents; Node left, right; } private Node root; public Iterator<A> orderediterator() { return new OrderedIterator(); } 21

... private class OrderedIterator implements Iterator<A> { Stack<Node> stack; OrderedIterator() { pushminstack(root); } private void pushminstack(node n) { while (n!= null) { stack.push(n); n = n.left; } }... 22

23 }... public boolean hasnext() { return!stack.empty(); } public A next() { if (stack.empty()) throw new NoSuchElementException(); Node node = stack.pop(); pushminstack(node.right); return node.contents; } }