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

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

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

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

Föreläsning 9 Innehåll

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

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

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

Trädstrukturer och grafer

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

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

Föreläsning Datastrukturer (DAT036)

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

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

Träd Hierarkiska strukturer

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

Lösningar Datastrukturer TDA

Tentamen, Algoritmer och datastrukturer

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

Föreläsning 9 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

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

Föreläsning 4 Datastrukturer (DAT037)

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

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 13. Träd

Föreläsning 3 Datastrukturer (DAT037)

Föreläsning 9 Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT036)

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)

Föreläsning Datastrukturer (DAT036)

Ä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.

Föreläsning 4 Datastrukturer (DAT037)

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

Datastrukturer. Föreläsning 5. Maps 1

Datastrukturer. föreläsning 10. Maps 1

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

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å

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

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

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

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

Föreläsning 13 Innehåll

Datastrukturer. föreläsning 10. Maps 1

Föreläsning 14 Innehåll

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

Lösningsförslag till tentamen Datastrukturer, DAT037,

Tentamen Datastrukturer, DAT037 (DAT036)

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

Vad har vi pratat om i kursen?

Datastrukturer. föreläsning 3. Stacks 1

Tentamen Datastrukturer, DAT037 (DAT036)

Algoritmer och datastrukturer 2012, föreläsning 6

Föreläsning 7. Träd och 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 3 Datastrukturer (DAT037)

Tentamen Datastrukturer D DAT 035/INN960

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

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

Hitta k största bland n element. Föreläsning 13 Innehåll. Histogramproblemet

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

Föreläsning 10 Datastrukturer (DAT037)

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

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

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

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

Lösningsförslag till tentamen Datastrukturer, DAT037,

Föreläsning 10 Innehåll

13 Prioritetsköer, heapar

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

Länkade strukturer, parametriserade typer och undantag

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

Programkonstruktion och. Datastrukturer

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

Tentamen TEN1 HI

Lösningsförslag till exempeltenta 1

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

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

Seminarium 13 Innehåll

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örsättsblad till skriftlig tentamen vid Linköpings Universitet

DAI2 (TIDAL) + I2 (TKIEK)

Föreläsning 5 Datastrukturer (DAT037)

Tentamen Datastrukturer (DAT036)

Föreläsning 2 Datastrukturer (DAT037)

DD1320 Tillämpad datalogi. Lösning (skiss) till tenta 20 okt 2011

Tentamen kl Uppgift 4. Uppgift 5

Föreläsning Datastrukturer (DAT037)

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

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

Tentamen Datastrukturer D DAT 036/INN960

Några svar till TDDC70/91 Datastrukturer och algoritmer

Träd - C&P kap. 10 speciellt binära sökträd sid. 452

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

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

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 (DAT036)

Tentamen Datastrukturer D DAT 035/INN960

Dugga Datastrukturer (DAT036)

Tildatenta Lösningsskiss

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.

Transkript:

TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 8 Erik Nilsson, 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

Grafteori En graf Består av noder & bågar T.ex. länder och sina grannar Norge Vakna På morgonen Sverige Finland Gå till jobbet En riktad graf Sätter riktning på bågarna T.ex. Ett tillståndsdiagram Gå till sängs Gå hem Jobba En riktad acyklisk graf (DAG) Innehåller inga cykler Agnes T.ex. Ett släktträd. Laura Torbjörn 3 Erik Tracy

Träd Definition (datastruktur*): Ett träd är en riktad acyklisk graf (DAG) och det finns enn väg till varje nod Vanliga användningsområden: Representering av hierarkier (ex): Organisationer Släktträd (DAG) Filsystem(mappar/filer) Spara data för snabb sökning 4 *Inom grafteorin är träd en acyklisk oriktad graf.

Scenario Harrys resultat: VD Adam Adamsson Utvecklingschef Berta Bengtsson Säljchef Caesar Cesarini Ekonomichef Diana Didriksson Hackaren Harry 5

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 6

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 7

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 8

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 9

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

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

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

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 13

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 14

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 + + Nackdel: kan inte spara två element med samma värde. 15

Binärt sökträd Sökning går snabbt! Hur snabbt? Vi fokuserar på balanserade träd och kollar på vad som händer när n ökar: n = 3 => max 1 steg n = 15 => max 3 steg n = 7 => max 2 steg Allmänt fall: För ett balanserat träd blir det maximala antalet steg som vi måste gå för att hitta vårt sökta värde lika med trädets höjd => O(log(n)) 16

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 + + 17

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 18

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

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

Representation(2) Parent(optional) data left right Kodexempel, som generisk klass class TreeNode<DataType> { TreeNode parent; DataType data; TreeNode left; TreeNode right; } 21

Representation(3) 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()); } 22

Representation(4) 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 23

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) 24

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 25