1 Träd nr 11 Binära träd ordnade, traversering, sökning.

Slides:



Advertisements
Liknande presentationer
Visual Basic - Genomgång
Advertisements

Relationsoperatorer Java/C# C/C++ Visual Basic FORTRAN PASCAL ORACLE
© 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
1 Listor En sekvens värden av samma typ Nr 5. 2 Listor Sekvens av värden, element Variabelt antal Alla med samma typ Bara första elementet direkt åtkomligt.
Föreläsning 3 Lista Array/länkad lista Lista implementerad som länkad lista Inlämningsuppgifter.
Nya typer Konstruerare, selektorer och predikat Rekursiva datatyper
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 11: Funktionella språk Funktioner och variabler i matematiken Funktionella.
Translating Natural Semantics to Meta-Modelica Emil Carlsson.
Fortsättningskurs i Programmering lektion 6
Föreläsning 3 Repetition Operatorer Styrstrukturer Deklaration och anrop av metoder.
Logikprogrammering Ons, 25/9
Abstrakta datatyper Moduler nr 12
2D1311 Programmeringsteknik med PBL
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 4.
Binära Sökträd, kapitel 19
Föreläsning 2 Datastrukturer Abstrakta datastrukturer Stack
Tar fram v ur kön v = R(true,0,Null) och q = (). d = 0 Leta sedan fram grannarna = {A, B} För granne A: newDist = 0+4 = 4. Ej besökt. q = (A(true,4,R))
Växjö 22 april -04Språk & logik: Parsning med kontextfria grammatiker1 DAB760:Språk och logik: 22 aprilParsning 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.
Träd och tillämpningar Data Structures & Problem Solving using Java -- Kapitel 19, 12.
1 Introduktion till SML Nr 2 Värden, typer och funktioner.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004 Datastrukturer och algoritmer Föreläsning 3.
Variabler: Datatyp - grundläggande : int, double, char, boolean eller
1 Funktioner Nr 3 Funktionstyper, högre ordningens funktioner och polymorfism.
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ö.
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.
1 Programmeringsmetodik, 8p ML-delen Programmering Programmeringsmetodik Programspråk NR 1.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 6: Semantik Statisk semantik Attributgrammatiker Dynamisk semantik Axiomatisk.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 8: Underprogram Underprogram Räckvidd Parameteröverföring.
1.Välj en nod vilken som helst och markera den som öppen. Låt den bli rot. A R B F C D E G
1 Mer om Nr 7 Rekursion, listor, typer och funktioner.
CSS del 3 Kvarnbrinkx Medietyper En XHTML-sida kan ha olika CSS-filer för olika medier! Definieras med attributet “media” i link- taggen,
Riktade listor i C och Java Lösning till gruppövning 1.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Föreläsning 11 Trie, Sökning och Sökträd.
Datastrukturer och algoritmer
Logikprogrammering 21/10 Binära träd
1 Introduktion till AI AI=“Få maskiner att göra sånt som, om…” AI kognitionspsykologi 3 viktiga områden: Kunskapsrepresentation Sökning (och kontroll)
Datastrukturer och algoritmer
1 Programmera med strängar nr 9 Tal till sträng Sträng till tal Grep Sträng till lista av ord.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 5 ( ) INNEHÅLL: -Metoder.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 4: Syntaxdefinition Formell syntaxdefinition Lexikalisk och kontextfri syntax Flertydighet i kontextfri.
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och datastructurer - Sökträd, naiva och balancerade lösningar -HashTable -- Kapitel.
© 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
2D1311 Programmeringsteknik med PBL
1 Mönstermatchning och rekursion Nr 4. 2 Förenklad notation val fnname = fn name => expression Förenklas till fun fnname name = expression Exempel fun.
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.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 12: -kalkylen allmänt om -kalkylen syntax semantik att programmera i -kalkylen.
© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 12.
Karl-Henrik Hagdahl, 11 november Repetition Logikprogrammering: måndag 11 november 2002.
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och datastrukturer - En annan sort tänkande, rekursiva metoder -Datastrukturen träd,
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 Datastrukturer och algoritmer Föreläsning 13 Sortering.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 5: Syntaxanalys (parsning) Syntaxanalysens mål Tillvägagångssätt och komplexitet Syntaxanalys.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 12: -kalkylen allmänt om -kalkylen syntax semantik att programmera i -kalkylen.
Procedurellt potpurri Dagens samtalsämnen –Klipp (Cut) –If-then-else –fail/0 –repeat/0 Att läsa –The Art of Prolog, kapitel 11 –Relevant avsnitt i Learn.
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och Datastrukturer -- Kap 21,14 Prioritets Köer (Priority Queues ), Graph.
Föreläsning 3 Operatorer Flödeskontroll Primitiva datatyperKlasser i API och egna klasser int double byte float char boolean short long String BufferedReader.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 3: Abstrakta datatyper Algebror Abstrakta datatyper Inkapsling och informationsmaskering.
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.
Lektion 4.
Mixed-type assignments
Global patterns of gene expressions in the Anopheline species.
Presentationens avskrift:

1 Träd nr 11 Binära träd ordnade, traversering, sökning

2 Binära träd Ett träd är en datatyp som består av en hierarki av noder. Varje nod består av ett värde och grenar till delträd. I ordnade träd bestäms placering av värdena i delträden av en relation mellan värdena och nodens värde. Det översta värdet kallas rot. I binära träd har varje nod två delträd, vänster och höger delträd.

3 Datatypen binära träd Ett binärt träd är antingen –tomt eller –en nod som består av ett värde och vänster och höger delträd datatype 'a tree = empty | node of 'a * 'a tree * 'a tree datatype 'a tree con node : ('a * 'a tree * 'a tree) -> 'a tree con empty : 'a tree I ett ordnat binärt träd (ett sökträd) så är alla värden i vänster delträd "mindre" än i noden och alla i höger "större", enligt någon ordning. type 'a order = 'a -> 'a -> bool

4 Insättning i ett ordnat binärt träd fun add less v empty = node (v,empty,empty) | add (less: 'a order) v (node(nv, left,right)) = if less v nv then node (nv,add less v left,right) else node (nv, left, add less v right) > val add = fn : 'a order -> 'a -> 'a tree -> 'a tree fun iless (n:int) m = n < m > val iless = fn : int -> (int -> bool) val iadd = add iless > val iadd = fn : int -> (int tree -> int tree)

5 Traversering av träd (från träd till lista) Inorder: först vänster delträd, sen roten och sist höger fun inorder empty = [] | inorder (node (v,l,r)) = inorder v :: inorder r > val inorder = fn : 'a tree -> 'a list Preorder: först roten, sen vänster delträd och sist höger fun preorder empty = [] | preorder (node (v,l,r)) = v :: preorder preorder r > val preorder = fn : 'a tree -> 'a list Postorder: först vänster, sen höger och sist roten fun postorder empty = [] | postorder (node (v,l,r)) = postorder postorder [v] > val postorder = fn : 'a tree -> 'a list

6 Fler funktioner på träd fun depth empty = 0 | depth (node (nv, left, right)) = 1 + max (depth left) (depth right); > val depth = fn : 'a tree -> int fun mirror empty = empty | mirror (node (nv, left, right)) = node (nv, mirror right, mirror left); > val mirror = fn : 'a tree -> 'a tree fun treesort order = inorder  reduce (add order) empty val treesort = fn : 'a order -> 'a list -> 'a list

7 Sökning Utnyttja ordning för att ger snabbare sökning fun in_tree less v empty = false | in_tree (less: ''a order) v (node (nv, l, r)) = let val in_sub = in_tree less v in v = nv orelse if less v nv then in_sub l else in_sub r end > val in_tree = fn : ''a order -> ''a -> ''a tree -> bool

8 Alternativ definition fun in_tree (less: ''a order) v = let fun in_t empty = false | in_t (node (nv,l,r)) = v = nv orelse if less v nv then in_t l else in_t r in in_t end > val in_tree = fn : ''a order -> ''a -> ''a tree -> bool

9 Avgöra om ett villkor uppfylls av ett träd Djupet först fun dfind p empty = false | dfind p (node (v, l, r)) = p v orelse dfind p l orelse dfind p r > val dfind = fn : ('a -> bool) -> 'a tree -> bool Bredden först fun bfind p t = let fun bp nil = false | bp (empty :: xs) = bp xs | bp (node (v, l, r) :: xs) = p v orelse bp [l,r]) in bp [t] end val bfind = fn : ('a -> bool) -> 'a tree -> bool

10 Lövade träd datatype 'a ltree = leaf of 'a | node of 'a ltree * 'a ltree datatype 'a ltree con node : ('a ltree * 'a ltree) -> 'a ltree con leaf : 'a -> 'a ltree fun rand (leaf x) = [x] | rand (node (l,r)) = rand rand r > val rand = fn : 'a ltree -> 'a list fun randa xs (leaf x) = x :: xs | randa xs (node (l,r)) = randa (randa xs r) l > val randa = fn : 'a list -> ('a ltree -> 'a list)

11 Fullständiga träd datatype ('a,'b) ftree = leaf of 'a | fnode of 'b * ('a,'b) ftree * ('a,'b) ftree datatype oper = plus | times | minus | div type val = int type expr = (val,oper) ftree fun eval (leaf n : expr) : int = n | eval (fnode (oper,l,r)) = let val lv = eval l val rv = eval r in case oper of plus => lv + rv | minus => lv - rv | times => lv * rv … end