Datastrukturer och algoritmer

Slides:



Advertisements
Liknande presentationer
Talföljder formler och summor
Advertisements

© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004 Datastrukturer och algoritmer Föreläsning 4.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning
Logikprogrammering, Mån 23/9 Rebecca Jonson. Repetition P :- Q, R. Deklarativ syn: –P är sann om Q och R är sanna. –Av Q och R följer P Procedurell syn:
Algoritmer och data strukturer -Länkade listor
Repetition inför provet
2D1311 Programmeringsteknik med PBL Föreläsning 7 Skolan för Datavetenskap och kommunikation.
För utveckling av verksamhet, produkter och livskvalitet. Rekursiva algoritmer, en annan sort tänkande -Hur -När -Bra/Dåligt (kap 7)
Logikprogrammering Ons, 25/9
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 4.
Datastrukturer och algoritmer Föreläsning 11. Datastrukturer och algoritmer VT08 Innehåll  Mängd  Lexikon  Heap  Kapitel , , 14.4.
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och datastructurer - Lite mer rekursivitet -Sorterrings algoritmer -- Kapitel 8 Algoritmer.
Binära Sökträd, kapitel 19
Algoritmer och datastrukturer
C-programmering ID120V William Sandqvist Länkad lista
Växjö 21 april -04Språk & logik: Kontextfria grammatiker1 DAB760: Språk och logik 21/4: Kontextfria 10-12grammatiker Leif Grönqvist
Föreläsning 10 Länkade lista Stack och Kö Att arbeta med listor
Datastrukturer och algoritmer
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Föreläsning 7 Träd.
DAV B04 - Databasteknik Indexering (kap 14).
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Kapitel 7: Deadlocks.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004 Datastrukturer och algoritmer Föreläsning 3.
Pathfinding. –Vad är det? –Sökning från A till B.
Föreläsning 4 Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö.
1 ITK:P1 Föreläsning 7 Algoritmer och datastrukturer DSV Marie Olsson.
Vektorer (klassen Vector) Sortering
Mer om arv - Polymorfism Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling Fredric Ragnar
Algoritmer och datastrukturer
1 Träd nr 11 Binära träd ordnade, traversering, sökning.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 6: Semantik Statisk semantik Attributgrammatiker Dynamisk semantik Axiomatisk.
Grundläggande programmering
F. Drewes, Inst. f. datavetenskap1 Föreläsning 11: Funktionella språk Funktioner och variabler i matematiken Funktionella språk LISP, ML och.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Föreläsning 11 Trie, Sökning och Sökträd.
Logikprogrammering 21/10 Binära träd
Prioritets Köer (Priority Queues ), Graph Data Structures & Problem Solving using Java --Kap 21,14.
För utveckling av verksamhet, produkter och livskvalitet. Stack och Kö - Implementering - Tilllämpningar.
Initiera nätverket med nollflöde. Kapaciteterna i svart ovan bågarna och flödet i grönt nedan bågarna. Skicka igenom ett enhetsflöde genom nätverket. Flödesvägen.
Datastrukturer och algoritmer
Stack och Kö -Implementering -Tilllämpningar -- Kapitel 16, 11.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 2: Variabler och datatyper Variabler Bindning Typkontroll Några viktiga datatyper.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Föreläsning 12 Sökning och Sökträd.
Länkade listor Binära träd
Träd -Allmänt om träd -Binärt träd -Filkomprimering med Huffman träd
F. Drewes, Inst. f. datavetenskap1 Föreläsning 9: Implementering av underprogram Aktiveringsposter Exekveringsstacken Implementera dynamisk räckvidd.
Köer -- Kapitel 16. Principen med en kö Köer är FIFO datastrukturer  First In – First Out  enqueue() Lägg till data i kön (först)  dequeue() Hämta.
Datastrukturer och algoritmer VT08 P = ((C,F,3), (B,D,3), (C,G,4),(A,F,4), (A,R,4), (C,D,5), (E,G,6), (B,R,6), (A,E,6), (A,C,8)) A R B F C D E G
Föreläsning 13 Logik med tillämpningar Innehåll u Aritmetik i Prolog u Rekursiva och iterativa program u Typpredikat u Metalogiska predikat.
© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 12.
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och datastrukturer - En annan sort tänkande, rekursiva metoder -Datastrukturen träd,
Lennart Edblom & Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 2: Variabler och datatyper Variabler Bindning Typkontroll Några viktiga datatyper.
Logikprogrammering 23/10 Binära träd In- och uthantering David Hjelm.
ITM1 Kapitel 8 Datastrukturer Grundläggande datavetenskap, 4p Utgående från boken Computer Science av: J. Glenn Brookshear.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Föreläsning 9 Grafalgoritmer.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 13 Sortering.
Logik med tillämpningar
Datastrukturer och algoritmer
© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 14.
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och Datastrukturer -- Kap 21,14 Prioritets Köer (Priority Queues ), Graph.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 14.
Anders Sjögren Data (i primärminnet) som en länkad lista datatypen för varje element i listan är en struktur, post ( struct )
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Föreläsning 8 Relationer, prioritetsköer och grafer.
Malmö högskola Rolf Axelsson 2003/2004 DA7235, 4 poäng Fält som returvärde Sortera fält Söka i fält Tvådimensionella fält Fält och spelplan Föreläsning.
© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 4.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Föreläsning 8-9 Relationer, prioritetsköer, grafer och grafalgoritmer.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 16.
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och datastrukturer Sökning, Symbol tabeller Binära sökträd.
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och datastructurer - En annan sort tänkande, rekursiva metoder -Datastrukturen träd.
Algoritmer och datastrukturer Föreläsning 8 Tidskomplexitet (Weiss kap
Relationer, prioritetsköer, grafer och grafalgoritmer
Föreläsning 8: Exempel och problemlösning
Presentationens avskrift:

Datastrukturer och algoritmer Gick igenom exemplen på traverseringar för noga så därför hann jag inte med Arrayimplementationen av binära träd (drog över 10 min). Lite för mycket material men tar man bort exemplen så borde det gå…. Föreläsning 10

Innehåll Modeller/tillämpningar för träd Organisation och terminologi Olika typer av träd Trädalgoritmer Implementering av träd Kapitel 10 och 11 i kursboken

Modeller/tillämpningar för träd Ordnat träd: Ordervägarna i ett regemente Binärt träd: Stamtavla/släktträd Tillämpningsexempel inom datavärlden: Filsystem Klasshierarkier i Java/OOP Besluts-/sök-/spelträd inom AI Prologs exekvering

Organisation och terminologi (1) Varje träd har minst en nod - roten Om det finns flera noder så finns det också grenar… …löv har träden också!

Organisation och terminologi (2) Elementen i ett träd kallas för noder. En nod har en position och ev. ett värde. Värdet på en nod kallas etikett. Alla noder på en nivå kallas syskon. Ett träd har ett ändligt antal noder och är en homogen datatyp. Föräldra-barn hierarki. Delträd = en nod och dess avkomma. Nivå 1 Nivå 2 Nivå 3 Nivå 4 Homogen = samma typ på alla noder

Organisation och terminologi (3) OBS! Detta skiljer sig från kursbokens definitioner! Ett träds noder finns på olika nivåer. Höjden h(x) för nod x är antalet bågar på den längsta grenen i det träd där x är rot. Höjden av ett träd T, h(T) = h(roten) h(a) = 0, h(b) = 2 och h(c) = 3 = h(T) Djupet d(x) hos en nod x är antalet bågar från x upp till roten. d(a) = 3, d(b) = 1, d(c) = 0 nivå(x) = d(x) + 1 c Nivå 1 Nivå 2 Nivå 3 Nivå 4 b a

Olika typer av träd Ordnat träd (ex militärhierarki) Syskonen är linjärt ordnade Oordnat träd (ex filsystemet på en dator) Ordningen bland syskonen har ingen betydelse Urträd Mer abstrakt än de två förra. Har en egen datatyp som hanterar syskonen. Se figur 10.1 sidan 191! I oordnat träd måste First-child och Next-sibling bytas ut mot mängdoperationer… I urträdet kan vi inte ha med några operationer som förutsätter något om hur barnen är organiserade. Kvar blir ”Insert-children” som stoppar in en mängd med barn och ”children” som tar fram barnen till en nod.

Olika typer av träd Riktade träd Binära träd (tex stamtavla) Kan bara gå i en riktning i trädet. I ett nedåtriktat träd saknas Parent. I ett uppåtriktat träd saknas Children, måste gå att nå något annat än roten, tex en operation som ger alla löv. Binära träd (tex stamtavla) Varje nod har högst två barn

”Begreppspaus”- Om ordning Ordnad Används för att beskriva olika sätt att ordna element i ett objekt i en datatyp Riktad När det finns en asymmetri när det gäller operationer för att hitta från ett element till ett annat. Sorterad När elementvärdena är sorterade enligt någon ordningsrelation En lista är ordnad av före/efter-relationen Riktade och oriktade listor Sorterade och osorterade listor

Binära träd (1) En nod i ett binärt träd kan ha högst två barn Barnen kallas vänster- och högerbarn. Det andra barnet kan komma före det första Träden nedan är OLIKA binära träd (men samma ”ordnade träd med max två barn”).

Maximal och minimal höjd Maximal höjd (n-1) för n=3, en nod på varje nivå: Minimal höjd, man kan inte flytta om några noder och få en mindre höjd: Minimal Ej minimal

Binära träd (2) För binära träd T med n noder och höjd h gäller: h  n-1 (maximala höjden) h  log2(n+1)-1 Antalet noder på höjd i: ni  2i dvs 1, 2, 4, 8,…, 2h Antalet noder totalt i trädet: n  2(h+1) - 1 Ett träd har minimal höjd om n > 2h - 1 vilket ger log2(n+1)-1  h < log2(n+1) dvs h är av O(log2(n)) h(T)  n-1 Varför? Trädet blir högst om man placerar en nod på varje nivå. Höjden blir då n-1. h(T)  log2(n+1)-1 På djupet 0 finns en nod (roten) På djupet ett högst 2 noder osv, på djupet i 2(i) största djupet är h om trädet har höjd h. n <= 1+2+4+…+2i+ .. + 2h = 2(h+1) -1 Ett träd har minimal höjd om n > 2h -1 (Man kan inte rymma så många noder i ett träd med lägre höjd än h)

Binära träd (3) Man vill ha så grunda träd som möjligt Se Figur 11.3 sidan 224 för exempel! Man vill ha så grunda träd som möjligt Om vänster och höger delträd är ungefär lika stora har trädet balans och vägen till en slumpvis vald nod är O(log2(n)) (se OH 12!) Komplett binärt träd (Rätt bra balans) Fyller på trädet från vänster till höger, en nivå i taget. Fullt binärt träd (Ofta dålig balans) Varje nod är antingen ett löv eller har två barn. Rita exempel!!

Algoritmer Basalgoritmer för träd Djup Höjd Slå ihop Dela upp Beräkna Traversera

Traversering av träd Tillämpningar av träd involverar ofta att man Söker efter ett element med vissa egenskaper Transformerar strukturen till en annan struktur Exempelvis sortering och balansering Filtrerar ut element med vissa egenskaper Alla dessa bygger på att man traverserar strukturen.

Traversering av träd - Bredden-först Man undersöker en nivå i taget. Först roten, sedan rotens barn, dess barnbarn osv. Kö ofta hjälp vid implementationen. Varje nod i trädet besöks endast en gång, dvs O(n). Söker man något som finns hittar man det. Kö: lägg in alla barn till nuvarande nod för att gå dit sen

Traversering av träd-Bredden först Algoritm bfOrder(Tree T) input: A tree T to be traversed for each level L of T do for each node of L do compute(node) a Ordningen: a, b, c, d, e, f, g, h, i, j b c d e f g h i j

Traversering av träd - Djupet-först Man följer varje gren i trädet utifrån roten till lövet Stack till hjälp för implementeringen Varje nod besöks endast en gång, dvs O(n). Tre varianter: Preorder Postorder Inorder Stack: lägg in besökta noder för att gå tillbaks till närmsta nod med obesökta barn

Traversering av träd - Preorder Algoritm preOrder(Tree T) input: A tree T to be traversed compute(root(T)) // Do something with node for each child w of root(T) do preOrder(w) preOrder(BinTree T) compute(root(T)) preOrder(leftChild(T)) preOrder(rightChild(T)) a b c d e f g h i j Ordningen: a, b, c, d, f, g, e, h, i, j

Preorder – Läsa ett dokument…

Traversering av träd - Postorder Algoritm postOrder(Tree T) input: A tree T to be traversed for each child w of root(T) do postOrder(w) compute(root(T)) // Do something with node postOrder(BinTree T) postOrder(leftChild(T)) postOrder(rightChild(T)) compute(root(T)) a b c d e Ordningen: b, c, f, g, d, h, i, j, e, a f g h i j

Postorder – Beräkna aritmetiska uttryck Algoritm evaluateExpression(Tree t) If isLeaf(t) return getValue(t) else op  getValue(t) x  evaluateExpression(leftChild(t)) y  evaluateExpression(rightChild(t)) return x op y Postorder – Beräkna aritmetiska uttryck / * + + 3 - 2 1 3 9 5

Traversering av träd – Inorder Algoritm inOrder(Tree T) input: A tree T to be traversed node  root(T) inOrder(firstChild(T)) compute(node) // Do something with node for each child w of node (except first) do inOrder(w) inOrder(BinTree T) inOrder(leftChild(T)) compute(root(T)) inOrder(rightChild(T)) a Man traverserar först det första delträdet inorder Sedan roten Sist resten av delträdet inorder b c d e Ordningen: b, a, c, f, d, g, h, e, i, j f g h i j

Inorder – Skriva aritmetiska uttryck Algoritm printExpression(Tree t) print ”(” if hasLeftChild(t) then printExpression(leftChild(t)) print getValue(t) if hasRightChild(t) then printExpression(rightChild(t)) print ”)” Inorder – Skriva aritmetiska uttryck / * + ( ( ( (3) + (1)) * 3) / ((9 - 5) + 2 ) … typ…. + 3 - 2 3 1 9 5

Trädda binära träd Nedåtriktade binära träd har ”lediga” länkar. Utnyttja dessa för att ”trä” genvägar i trädet. Det är vanligt att skapa inorder- trädda träd. Detta gör att man kan traversera med hjälp av iteration istället för rekursion. Sparar minne

Tillämpningar av träd Sökträd Varje nod symboliserar ett givet tillstånd. Barnen symboliserar de olika tillstånd man kan hamna i utifrån förälderns tillstånd. Det gäller att hitta målnoden, dvs ett tillstånd som löser problemet. Inte rimligt att bygga upp alla noder (möjliga tillstånd). Ofta används heuristik Heuristik i shack: evaluera hur bra en situation är för några nivåer ner

Tillämpningar av träd Planträd och OCH/ELLER-träd Noderna symboliserar hur man bryter ned ett stort problem i mindre delar och i vilken ordning man bör lösa dessa mindre delproblem. Ofta använder man OCH/ELLER-träd där man kan ha OCH-kanter eller ELLER-kanter mellan förälder och barn. OCH – alla barn behövs för lösningen ELLER – något barn behövs Sen finns också syntax eller parseträd som visar hur ett språk bör vara uppbyggd

Implementationer av träd Oordnat uppåtriktat träd som fält Varje element i en vektor består av ett par: nodens etikett och en referens till föräldern. + Tar liten plats - Inget bra stöd för traversering (t ex svårt veta vilka noder som är löv) - Maximala storleken på trädet måste bestämmas i förväg Finns flera olika förslag i boken. Läs och fundera! Se Figur 10.7 och 10.8 på sid. 205 för exempel!

Implementationer av träd Ordnat träd som n-länkad struktur Noden i trädet består av n-celler med etikett, länk till föräldern och n-1 länkar till barnen + Antalet noder i trädet dynamiskt. - Maximala antalet barn bestämt i förväg. - Om det är stor variation i antalet barn så finns outnyttjade länkar. Finns flera olika förslag i boken. Läs och fundera! Se Figur 10.9 på sid. 206 för exempel!

Implementationer av träd Nedåtriktat ordnat träd som 1-länkad struktur med lista av barn Noden i trädet består av 1-celler med en etikett och en länk till en barnlista + Antalet noder i trädet dynamiskt. + Antalet barn i nätet dynamiskt Utöka till 2-celler så blir trädet oriktat Noden får en länk till föräldern, en etikett samt en länk till barnlista. Se Figur 10.11 och 10.12 på sid. 207 för exempel! Finns flera olika förslag i boken. Läs och fundera!

Implementationer av träd Uppåtriktat binärt träd med hjälp av 1-cell Nedåtriktat binärt träd med 2-cell Oriktat binärt träd med 3-cell Föräldra-länk Etikett Vänster-barn Etikett Höger-barn Finns flera olika förslag i boken. Läs och fundera! Föräldra-länk Vänster-barn Etikett Höger- barn

Implementationer av träd Noder som håller reda på förälder, första barn och syskon. a b c d e f Finns flera olika förslag i boken. Läs och fundera! g

Implementationer av träd Binärt träd som fält Roten har index 1 och noden med index i har sitt vänsterbarn i noden med index 2i sitt högerbarn i noden med index 2i +1 sin förälder i noden med index floor(i/2) + Tar inget utrymme för strukturinformation - Trädet har ett maxdjup (statiskt fält) - Ev. slöseri med utrymme Krävs ”markörer” för tom nod och inget värde Finns flera olika förslag i boken. Läs och fundera! Kom ihåg förklara floor!! Ev. slöseri med utrymme om litet träd lagras eller ett icke-komplett träd lagras