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



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

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

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

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

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

Träd, binära träd och sökträd. Koffman & Wolfgang kapitel 6, avsnitt 1 4

Dugga Datastrukturer (DAT036)

Föreläsning 10. ADT:er och datastrukturer

Föreläsning 9 Innehåll

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

Tentamen TEN1 HI

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

Grafer. 1 Grafer. Grunder i matematik och logik (2015) 1.1 Oriktade grafer. Marco Kuhlmann

Föreläsning 4. Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö

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

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

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

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

Tentamen, Algoritmer och datastrukturer

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

Försättsblad till skriftlig tentamen vid Linköpings Universitet

Föreläsning Datastrukturer (DAT036)

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 5 Erik Nilsson, Institutionen för Datavetenskap, LiU

Trädstrukturer och grafer

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

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

Tentamen Datastrukturer D DAT 036/DIT960

Sätt att skriva ut binärträd

Föreläsning 13 och 14: Binära träd

Datastrukturer och algoritmer

Tentamen Datastrukturer, DAT037 (DAT036)

TDDC74 Programmering, abstraktion och modellering DUGGA 2

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

Föreläsning 11. ADT:er och datastrukturer

Datastrukturer. föreläsning 3. Stacks 1

Algoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm.

Träd. Rot. Förgrening. Löv

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

Innehåll. Föreläsning 11. Organisation av Trie. Trie Ytterligare en variant av träd. Vi har tidigare sett: Informell specifikation

Föreläsning 6: Introduktion av listor

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

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

Tentamen Datastrukturer, DAT037 (DAT036)

Föreläsning 9 Innehåll

6 Rekursion. 6.1 Rekursionens fyra principer. 6.2 Några vanliga användningsområden för rekursion. Problem löses genom:

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

Föreläsning 3 Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT036)

Tillämpad Programmering (ID1218) :00-13:00

Tommy Färnqvist, IDA, Linköpings universitet. 1 ADT Map/Dictionary Definitioner Implementation... 2

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

Föreläsning 4: Kombinatorisk sökning

Inlämningsuppgift MiniPlotter

OOP Objekt-orienterad programmering

Några svar till TDDC70/91 Datastrukturer och algoritmer

Tentamen Datastrukturer (DAT036)

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

TDDC30 Programmering i Java, datastrukturer och algoritmer

Institutionen för TENTAMEN CTH HT-15 Datavetenskap TDA540. Tentamen för TDA540 Objektorienterad programmering

Tentamen Datastrukturer (DAT036)

Lösningsförslag till tentamen Datastrukturer, DAT037,

Föreläsning 9 Datastrukturer (DAT037)

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

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

ADT Kö. Seminarium 4 Köer och Stackar Innehåll. Operationer. ADT Stack. Definition. Definition

Föreläsning 4 Datastrukturer (DAT037)

Föreläsning 13. Träd

Objektorienterad programmering i Java

Programmering för språkteknologer II, HT2014. Rum

TDDC74 Programmering, abstraktion och modellering. Tentamen

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

ADS : STACK ADT: STACK. Stack och Kö -Implementering - Tilllämpningar. Oftast förekommande metoder i Stack. TopOfStack

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl

Tommy Färnqvist, IDA, Linköpings universitet

Tommy Färnqvist, IDA, Linköpings universitet

Introduktion till algoritmer - Lektion 3 Matematikgymnasiet, Läsåret Lektion 3

Tentamen i Algoritmer & Datastrukturer i Java

Föreläsning 3 Datastrukturer (DAT037)

Datastrukturer och Algoritmer D0041D

Försättsblad till skriftlig tentamen vid Linköpings Universitet

Tentamen Datastrukturer (DAT037)

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket

DELPROV 1 I DATAVETENSKAP

Att använda pekare i. C-kod

Länkade listor kan ingå som en del av språket, dock ej i C Länkade listor är ett alternativ till:

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

Teoretisk del. Facit Tentamen TDDC kl (6) 1. (6p) "Snabba frågor" Alla svar motiveras väl.

Abstrakta datastrukturer

Träd. Ett träd kan se ut på detta sätt:

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)

TENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 14:00-19:00

Tentamen Datastrukturer (DAT036)

Tentamen. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004

Programmering II (ID1019) :00-11:00

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

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

TDDC30 Programmering i Java, datastrukturer och algoritmer

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

Tentamen TEN1 HI

Länkade strukturer, parametriserade typer och undantag

Transkript:

TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 8 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Träd Traversering Insättning, borttagning Representation som länkad nod, array 1

Scenario Harry har fått i uppdrag att bringa ordning och reda till ett företags chefstruktur med ett nytt program Harry börjar med att skriva in alla anställda i en enkellänkad lista, men det blir snabbt krångligt En ny datastruktur behövs! 2

Scenario Resultatet: VD Adam Adamsson Utvecklingschef Bertil Bengtsson Säljchef Caesar Cesarini Ekonomichef David Didriksson Hackaren Harry 3

Träd Definition: Ett träd är en riktad acyklisk graf Består av noder & bågar Finns enn väg till varje nod Vanliga användningsområden: Representering av hierarki i: Företag Släktträd Filsystem(mappar/filer) Spara data för snabb sökning 4

Träd(2) Definition: Förälder: en nod som har minst ett barn Syskon: noder med samma förälder Rot: en nod utan förälder Löv: en nod utan barn Gren/delträd: en samling noder med gemensam anfader Rot Syskon Förälder Barn Gren Träd defineras rekursivt: Ett delträd är också ett träd, som kan innehålla fler delträd, eller bara en nod (d.v.s. ett löv) Löv 5

Träd(3) Nodinformation: Grad: Antal barn noden har Djup: Avstånd från roten Höjd: Avstånd till lövet längst bort, nedåt Trädets höjd = Rotens höjd Djup 0 1 2 3 Träd med noder av grad 2: Binärt träd Grad: 2 Djup: 1 Höjd:2 6

ADT Träd element() parent() children() isinternal() isexternal(), isleaf() isroot() isempty() Binära träd left() right() hasleft() hasright() Returnerar datat i rotnoden (för delträdet) Returnerar föräldranoden (implementeras inte alltid) Returnerar en kollektion(t.ex. en lista) med nodens barn Testar om noden är en inre nod d.v.s. om den har barn Testar om noden är en yttre nod d.v.s. om den är ett löv Returnerar sant om noden ej har någon förälder Testar om (del)trädet har några noder överhuvudtaget Returnerar det vänstra barnet Returnerar det högra barnet Testar om noden har ett vänsterbarn Testar om noden har ett högerbarn 7

Traversering Traversering: Ett systematiskt sätt att besöka alla noder i ett träd En träditerator implementerar någon form av traverseringsalgoritm Djupetförst Breddenförst 8

Preordertraversering Algoritm: 1. Besök mig 2. Besök vänstra delträdet 3. Besök högra delträdet = Delträd 9

Inordertraversering Algoritm: 1. Besök vänstra delträdet 2. Besök mig 3. Besök högra delträdet = Delträd 10

Postordertraversering Algoritm: 1. Besök vänstra delträdet 2. Besök högra delträdet 3. Besök mig = Delträd 11

Levelordertraversering Algoritm: 1. Besök mig 2. Besök mina syskon till höger 3. Besök de som har djup + 1 Djup 0 1 2 3 12

Några fler termer Fullt binärt träd: Samtliga noder har noll eller två barn Perfekt träd: Ett fullt träd med alla löv på samma djup Fullständigt binärt träd: Ett perfekt träd med skillnaden att den får sakna några av de högraste löven, längst ned 13

Binärt sökträd En typ av binärt träd En struktur för snabb sökning För varje nod gäller följande: Alla element till vänster är mindre än nodens värde Alla element till höger är större än nodens värde + + Fördel: Givet att trädet är väl balanserat (ej fallet ovan) blir söktiden O(log(n)) Nackdel: Kan ej lagra fler värden av samma storlek 14

Addering i binärt sökträd För varje nod som besöks: Existerar ej noden: Rätt plats funnen Är värdet mindre än nodens: följ den vänstra grenen Är värdet större än nodens: följ den högra grenen + + 15

Borttagning i binärt sökträd Mål: ta bort värdet 3 Steg 1, 2, 3: 7 + Strategi: 1. Sök ut rätt nod på liknande sätt som vid adderingen 2. Sök reda på en ersättare: 1. Om bara ett barn finns, välj det 2. Annars välj noden längst till vänster i det högra delträdet. 3. Koppla loss ersättaren, ersätt den med dess högra delträd om ett sådant finns 4. Sätt in ersättaren på dess nya plats 1 1 Steg 4: 2 2 3 4 3 5 + 4 6 + 5 6 7 + 8 9 8 9 16

Borttagning i binärt sökträd(2) Det färdiga trädet efter borttagningen 7 + 4 + 9 2 6 8 1 5 17

Representation Träd brukar vanligtvis implementeras som länkade noder Parent(optional) data left right 18

Representation(2) Parent(optional) data left right Då delträd också är träd lämpar sig strukturen väl för rekursiva algoritmer Exempel: Preordertraversering public void visitpreorder(treenode node){ node.visitme(); visitpreorder(node.left()); visitpreorder(node.right()); } 19

Representation(3) Parent(optional) data Stackar och köer kan också användas för traversering left right Exempel: Levelordertraversering (Börja med att lägga roten i en kö) 1. Hämta en nod från kön 2. Besök noden 3. Lägg vänster och höger barn i kön 4. Repetera så länge kön inte är tom 20

Representation med fält Träd kan även implementeras med ett fält! A ADT Representation D B E F C A B C D E F G H G H Traverseringsregler för binärt träd: Index för root 0 Index för vänster barn 2*i+1 Index för höger barn 2*i+2 Index för förälder (i1)/2 (avrunda nedåt) 21

Implementation som fält(2) Egenskaper för fältrepresentation Slipper tre pekare per element Mindre minne Traversera m.h.a. aritmetiska operationer (2*i + 1) Minne kan preallokeras (vanligtvis ett träddjup i taget) Fält allokeras som sammanhängande stycken av datorminne => Hög spatial lokalitet => Snabbt A B C D E F G H Varje new är ett anrop till OS för att be om minne, tar tid Tenderar att bli svårare att implementera Ett dåligt balanserat träd ger ineffektivt minnesutnyttjande 22