DD1361 Programmeringsparadigm HT17

Relevanta dokument
DD1361 Programmeringsparadigm HT16

DD1361 Programmeringsparadigm HT15

DD1361 Programmeringsparadigm HT15

DD1361 Programmeringsparadigm HT15

DD1361 Programmeringsparadigm HT17

DD1361 Programmeringsparadigm HT16

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)

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)

Rekursiva algoritmer sortering sökning mönstermatchning

Tentamen, Algoritmer och datastrukturer

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

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

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

Programkonstruktion och. Datastrukturer

Föreläsning 4 Datastrukturer (DAT037)

Centrala begrepp i prolog och logikprogrammering. Annamaris lista

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

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

Trädstrukturer och grafer

Föreläsning 5 Datastrukturer (DAT037)

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

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

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

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

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

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

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

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

Föreläsning 3 Datastrukturer (DAT037)

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

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

Föreläsning 9 Datastrukturer (DAT037)

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

Seminarium 13 Innehåll

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

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Föreläsning 4 Datastrukturer (DAT037)

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

Föreläsning 9 Innehåll

Föreläsning 9 Innehåll

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

Algoritmer och datastrukturer 2012, föreläsning 6

Lösningar Datastrukturer TDA

TDDC74 Programmering, abstraktion och modellering DUGGA 2

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

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.

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

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

Föreläsning Datastrukturer (DAT036)

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

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

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

Föreläsning 10 Innehåll

Föreläsning Datastrukturer (DAT036)

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

Föreläsning Datastrukturer (DAT036)

Informationsteknologi Tom Smedsaas 19 augusti 2016

Föreläsning 13 Innehåll

Datastrukturer. föreläsning 10. Maps 1

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

Övningshäfte 2: Induktion och rekursion

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å

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

Datastrukturer. föreläsning 10. Maps 1

Programmering II (ID1019)

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

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

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

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

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

Tentamen TEN1 HI

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

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 3 Datastrukturer (DAT037)

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

Tentamen Datastrukturer D DAT 036/INN960

Tentamen i TDP004 Objektorienterad Programmering Praktisk del

FL 5: Aritmetik. Teori

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

Länkning av Prolog under C

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

13 Prioritetsköer, heapar

TDDC74 Lab 02 Listor, sammansatta strukturer

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

Programmering II (ID1019) :00-11:00

Föreläsning Datastrukturer (DAT036)

Tentamen Datastrukturer D DAT 036/INN960

Hur man programmerar. TDDC66 Datorsystem och programmering Föreläsning 3. Peter Dalenius Institutionen för datavetenskap

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

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

Programmering II (ID1019) :00-12:00

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

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

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

Föreläsning Datastrukturer (DAT037)

Exempel på typer av datorspråk EXCEL

Transkript:

DD1361 Programmeringsparadigm HT17 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 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. Induktiv definition (BNF) <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: för löven leaf, definiera predikatet utan rekursion; för sammansatta träden 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 bågar) av längsta stigen från roten till något löv. Definition med strukturell induktion? 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. Definition med strukturell induktion? complete(leaf). complete(branch(tl, TR)) :- complete(tl), complete(tr), height(tl, N), height(tr, N).

Binära träd med data 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. Induktiv definition (BNF) <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. Definition med strukturell induktion? 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). Definition med strukturell induktion? treesum(leaf(n), N). treesum(branch(n, TL, TR), N1) :- treesum(tl, NL), treesum(tr, NR), N1 is NL+NR+N.

Strukturella operationer över träd Operationer Att lägga till ett element. Att ta bort ett element. Problematiskt för binära träd! Ofullständiga binära träd (utan data) idé: tillåt också tomma träd BNF-definition: <Tree> ::= nil leaf branch(<tree>, <Tree>) exempel: branch(leaf, branch(nil, leaf))

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