DD1361 Programmeringsparadigm HT16

Relevanta dokument
DD1361 Programmeringsparadigm HT17

DD1361 Programmeringsparadigm HT15

DD1361 Programmeringsparadigm HT15

DD1361 Programmeringsparadigm HT15

DD1361 Programmeringsparadigm HT16

DD1361 Programmeringsparadigm HT17

Träd Hierarkiska strukturer

Föreläsning 6: Induktion

Två fall: q Tom sekvens: () q Sekvens av element: (a b c) ; (sum-rec '(2 4 6)) = 12. q Första elementet uppfyller vissa villkor: (2 a b c)

Tentamen, Algoritmer och datastrukturer

Programkonstruktion och. Datastrukturer

TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 9 juni 2016, kl 14 18

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)

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

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

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

Rekursiva algoritmer sortering sökning mönstermatchning

Föreläsning 4 Datastrukturer (DAT037)

Programmeringsmetodik DV1 Programkonstruktion 1. Moment 8 Om abstrakta datatyper och binära sökträd

Trädstrukturer och grafer

Tabeller. Programkonstruktion. Moment 8 Om abstrakta datatyper och binära sökträd. Implementering av tabellen. Operationer på tabellen

TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 27 augusti 2016, kl 8 12

Centrala begrepp i prolog och logikprogrammering. Annamaris lista

Föreläsning 9 i programmeringsparadigm. Paradigmöversikt, paradigmhistoria, paradigmgeografi. Se även föreläsning 1.

Föreläsning 5 Datastrukturer (DAT037)

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

Seminarium 13 Innehåll

Föreläsning 9 Innehåll

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18

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

Dagens föreläsning Programmering i Lisp Fö 7. Sammanfattning funktionell programmering Exempel på funktionella programspråk

FL 5: Aritmetik. Teori

Lösningar Datastrukturer TDA

TDDC74 Programmering, abstraktion och modellering DUGGA 2

Tabeller. Programkonstruktion. Moment 8 Om abstrakta datatyper och binära sökträd. Specifikationer för tabellfunktionerna. Operationer på tabellen

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

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

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

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

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

Föreläsning 9 Innehåll

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

Informationsteknologi Tom Smedsaas 19 augusti 2016

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

Föreläsning 13 Innehåll

Föreläsning 9 Datastrukturer (DAT037)

Datastrukturer. föreläsning 10. Maps 1

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å

Instruktioner - Datortentamen TDDE24 och TDDD73 Funktionell och imperativ programmering (i Python)

Föreläsning 4 Datastrukturer (DAT037)

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson 2

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

Dagens föreläsning Programmering i Lisp Fö 5

Föreläsning 8. newtype Chess = Chess [(Square, Chessman)] -- data ist f newtype OK -- data istället för newtype krävs om >1 konstruerare.

Automatateori (2) Idag: Sammanhangsfria språk. Dessa kan uttryckas med Grammatik PDA

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

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

Föreläsning 3 Datastrukturer (DAT037)

3. Toppkvinnor på hög Låt lådan och de två kvinnornas famnar utgöra stackarna L, K1 respektive K2. Från början finns alla kort i L.

Föreläsning 10 Innehåll

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

Läsanvisning till Discrete matematics av Norman Biggs - 5B1118 Diskret matematik

Föreläsning Datastrukturer (DAT036)

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

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

DD1361 Programmeringsparadigm. Formella Språk & Syntaxanalys. Per Austrin

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

OMTENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 14:15 19:15

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

Datastrukturer. föreläsning 10. Maps 1

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

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

Föreläsning Datastrukturer (DAT036)

Krafts olikhet. En momentant avkodbar kod (prefixkod) med kodordslängderna l 1,...,l N existerar om och endast om. 2 l i. 1 i=1

DD1361 Programmeringsparadigm. Formella Språk & Syntaxanalys. Per Austrin

Källkodning. Egenskaper hos koder. Några exempel

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

Algoritmer och datastrukturer 2012, fo rela sning 8

Tentamen Datastrukturer D DAT 036/INN960

SCB :-0. Uno Holmer, Chalmers, höger 2 Ex. Induktiv definition av lista. // Basfall

Lösningsförslag till exempeltenta 1

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

Övning 2. (Länkade) Listor, noder

Programmering II (ID1019) :00-17:00

Föreläsning Datastrukturer (DAT036)

Övningshäfte 2: Induktion och rekursion

Tentamen Datastrukturer, DAT037 (DAT036)

Tentamen Datastrukturer D DAT 036/INN960

Del : Paradigmer allmänt.

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

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

Länkning av Prolog under C

PROV I MATEMATIK Algoritmik 26 mars 2008

Facit Tentamen TDDC (7)

Ekvivalensrelationer

Digitalitet. Kontinuerlig. Direkt proportionerlig mot källan. Ex. sprittermometer. Elektrisk signal som representerar ljud.

Algoritmer och datastrukturer 2012, föreläsning 6

Optimala koder. Övre gräns för optimala koder. Gränser. Övre gräns för optimala koder, forts.

Optimala koder. Det existerar förstås flera koder som har samma kodordsmedellängd. Enklaste fallet är att bara byta 0:or mot 1:or.

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

Transkript:

DD1361 Programmeringsparadigm HT16 Logikprogrammering 3 Dilian Gurov, TCS

Idag Induktiva datatyper: Träd (inte inbyggd) Binära träd utan data Binära träd med data Problemdomänbeskrivning Läsmaterial Prolog-fil: tree.pl Handouts: Föreläsningsanteckningar

Binära träd utan data Induktiv definition Binära träd utan data utgör en oändlig mängd av Prolog-termer: Ett binärt träd utan data är antingen ett löv, leaf, eller ett sammansatt träd, branch(t1, t2), som består av ett vänster delträd t1 och ett höger delträd t2. BNF-definition: (OBS: Prolog vet ingenting om detta!) <Tree> ::= leaf branch(<tree>, <Tree>) där leaf och branch kallas för konstruktörer. Därmed matchar varje binärt träd utan data t antingen leaf eller branch(tl, TR). Exempel på (stängda) träd-termer: leaf, branch(leaf, leaf), branch(leaf, branch(leaf, leaf)). Träd-termer kan också innehålla variabler: branch(x, leaf).

Strukturell induktion För att definiera ett predikat över binära träd utan data med strukturell induktion: för löv leaf, definiera predikatet direkt; för sammansatta trädet branch(tl, TR), definiera predikatet med användning av samma predikat beräknat över delträden TL och TR. Då blir predikatet väldefinierad över alla binära träd utan data.

Höjden på ett träd Höjden på ett träd t är längden (antalet bogar) av längsta stigen från roten till något löv.

Höjden på ett träd Höjden på ett träd t är längden (antalet bogar) av längsta stigen från roten till något löv. höjden på ett löv leaf

Höjden på ett träd Höjden på ett träd t är längden (antalet bogar) av längsta stigen från roten till något löv. höjden på ett löv leaf är 0;

Höjden på ett träd Höjden på ett träd t är längden (antalet bogar) av längsta stigen från roten till något löv. höjden på ett löv leaf är 0; höjden på ett sammansatta träd branch(tl, TR)

Höjden på ett träd Höjden på ett träd t är längden (antalet bogar) av längsta stigen från roten till något löv. höjden på ett löv leaf är 0; höjden på ett sammansatta träd branch(tl, TR) är maximum av höjdena på delträden TL och TR plus 1.

Höjden på ett träd: height(t, N) max(x, Y, X) :- Y<X. max(x, Y, Y). height(leaf, 0). height(branch(tl, TR), N) :- height(tl, NL), height(tr, NR), max(nl, NR, M), N is M+1.

Kompletta träd: complete(t) Ett träd är komplett om det har alla sina löv på samma höjd.

Kompletta träd: complete(t) Ett träd är komplett om det har alla sina löv på samma höjd. complete(leaf). complete(branch(tl, TR)) :- complete(tl), complete(tr), height(tl, N), height(tr, N).

Binära träd med data Induktiv definition Ett binärt träd med data är antingen ett löv leaf(d) med en data-term d, eller ett sammansatt träd branch(d, t1, t2) med en data-term d, ett vänster delträd t1, och ett höger delträd t2. BNF-definition: <Tree> ::= leaf(<data>) branch ((<Data>, <Tree>, <Tree>) Därmed matchar varje binärt träd med data t antingen leaf(d) eller branch(d, TL, TR). Exempel: branch(-3,branch(4,leaf(8),leaf(-2)),leaf(7)).

Medlemskap i ett träd: lookup(d, T) Som member(x, L), fast för träd med data.

Medlemskap i ett träd: lookup(d, T) Som member(x, L), fast för träd med data. lookup(d, leaf(d)). lookup(d, branch(d, _, _)). lookup(d, branch(_, TL, _)) :- lookup(d, TL). lookup(d, branch(_, _, TR)) :- lookup(d, TR).

Summering i ett träd: treesum(t, N) Beräknar summan av alla tal i trädet (antar att allt data är tal).

Summering i ett träd: treesum(t, N) Beräknar summan av alla tal i trädet (antar att allt data är tal). treesum(leaf(n), N). treesum(branch(n, TL, TR), N1) :- treesum(tl, NL), treesum(tr, NR), N1 is NL+NR+N.

Andra operationer över träd Operationer Att lägga till ett element. Att ta bort ett element. Hur ska man göra med ett löv?

Problemdomänbeskrivning: Hierarkiska mjukvarusystem Datatypen hierarkiska mjukvarusystem kan definieras induktivt med två regler: ett mjukvarusystem är antingen en funktion (som i språket C), eller en modul bestående av mjukvarusystem. 1. Föreslå ett sätt att representera mjukvarusystem som Prolog-termer, där funktionerna representeras som atomer med samma namn som funktionen, t.ex. main, min, max. 2. Ge två exempel på termer som representerar mjukvarusystem med flera nivåer av nästlande. 3. För din representation av datatypen mjukvarusystem, skriv ett predikat funcsmvs(s, FL) som är sant om och bara om FL är en lista som innehåller namnen på alla funktioner i hierarkiska mjukvarusystemet S (med möjlig upprepning).

Hierarkiska mjukvarusystem: Prolog-termer 1. Sammansättningar går enklast att representeras som listor. En möjlig BNF-grammatik vore: <MVS> ::= func(<name>) mod(<mvslist>) <MVSList> ::= [] [<MVS> <MVSList>] 2. Exempel-termer: func(foo) mod([func(main), mod([func(min), func(max), func(avg)])])

Hierarkiska mjukvarusystem: funcsmvs(s, FL) 3. Om vi följer strukturella induktionsprincipen för ömsesidigt rekursiva datatyper (se texten The Priciple of Structural Induction ), så får vi: funcsmvs(func(n), [N]). funcsmvs(mod(sl), FL) :- funcsmvslist(sl, FL). funcsmvslist([], []). funcsmvslist([s SL], FL) :- funcsmvs(s, FL1), funcsmvslist(sl, FL2), append(fl1, FL2, FL).