Symbolisk data. quote. (define a 1) (define b 2) (jacek johan david) (list a b)

Relevanta dokument
Signalflödesmodellen. Två (gamla) exempel: Kvadratera alla jämna löv.

Idag: Par och listor. Scheme. DA2001 (Föreläsning 6) Datalogi 1 Hösten / 29

Idag: Par och listor. Symboler. Symboler används för att uttrycka icke-numeriska data såsom namn, adress, bilregisternummer, boktitel, osv.

Modularitet och tillstånd. Stora system kräver en uppdelning. En lösning: modularitet. Basera programmets struktur på den fysiska systemets struktur:

Föreläsning 9 Exempel

Föreläsning 9 Exempel. Intervallhalveringsmetoden. Intervallhalveringsmetoden... Intervallhalveringsmetoden...

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)

n Detta för att kunna koncentrera oss på n Tal: number? n Symboler: symbol? n Strängar: string? n Tecken: char? n Boolskt: boolean?

TDDC74 Programmering: Abstraktion och modellering Dugga 2, Tid: kl 08-10, Datum:

Lösningsförslag. TDDC74 Programmering: Abstraktion och modellering. Dugga 3 (provkod TEN1), Tid: kl 14-16, Datum:

TDDC74 Programmering, abstraktion och modellering. Tentamen

Ändringsbar (mutable compound) data. TDDC74 Programmering: abstraktion och modellering. Sätta - samman listor kopiering. Hitta sista cons-cellen

TDDC74 Programmering, abstraktion och modellering. Tentamen

Språket Scheme. DAT 060: Introduktion till (funktions)programmering. DrScheme. uttryck. Jacek Malec m. fl. evaluering av uttryck.

TDDC74 Programmering: Abstraktion och modellering Tenta, kl 14 18, 11 juni 2014

TDDC74 Programmering, abstraktion och modellering. Tentamen

TDDC74 Programmering: Abstraktion och modellering. Provkod TEN1, Tid: kl 14-18, , Kåra

Rekursiva algoritmer sortering sökning mönstermatchning

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

TDDC74 Programmering, abstraktion och modellering DUGGA 2

Innehåll. Föreläsning 11. Organisation av Trie. Trie Ytterligare en variant av träd. Vi har tidigare sett: Informell specifikation

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

TDDC74 Lab 02 Listor, sammansatta strukturer

Sökning och sortering. Sökning och sortering - definitioner. Sökning i oordnad lista. Sökning med vaktpost i oordnad lista

Datalogi, grundkurs 1. Lösningsförslag till tentamen

Institutionen för datavetenskap, DAT060, Laboration 2 2 För denna enkla simulerings skull kommer handen att representeras som ett par tal μ värdet på

Sökning och sortering

TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 29 augusti 2015, kl 8 12

Datalogi, grundkurs 1. Lösningsförslag till tentamen

Tentamen, Algoritmer och datastrukturer

TDDC74 Programmering, abstraktion och modellering DUGGA 3

TDDC74 Programmering: Abstraktion och modellering Datordugga 2 - exempel

Några saker till och lite om snabbare sortering

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

Tentamen i. TDDA 69 Data och programstrukturer

Sökning i ordnad lista. Sökning och sortering. Sökning med vaktpost i oordnad lista

TDDC74 Programmering: Abstraktion och modellering Datortenta

Dagens föreläsning. Diverse Common Lisp. Konstanter, parametrar, globala variabler

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 08-12

Föreläsning 9 Innehåll

TDDC74 Programmering: Abstraktion och modellering Dugga 2, kl 8 10, 5 mars 2015

Uppgift 6A - Frekvenstabell

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

TDDC74 - Lektionsmaterial C

TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 14-16

TDDC74 Lab 04 Muterbara strukturer, omgivningar

Föreläsning Datastrukturer (DAT036)

TDDC74 Programmering, abstraktion och modellering DUGGA 2

Grundläggande logik och modellteori

Föreläsning 9 Datastrukturer (DAT037)

TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 17-19

Lära dig analysera större och mer komplicerade problem och formulera lösningar innan du implementerar.

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

TDDC74 Programmering, abstraktion och modellering. Tentamen

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

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

Börja med att kopiera källkoden till din scheme-katalog (som du skapade i Laboration 1).

Tentamen i. TDDC67 Funktionell programmering och Lisp

Prov i DAT 312: Algoritmer och datastrukturer för systemvetare

Symboliska konstanter const

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

Lösningar Datastrukturer TDA

Datalogi, grundkurs 1 Övningsuppgifter i Scheme. Serafim Dahl, Carina Edlund, m.fl.

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

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

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

Sökning och sortering

Innehåll. Föreläsning 10. Specifikation. Mängd. Specifikation. Konstruktion av mängd. Mängd Lexikon Hashtabell

Introduktion till programmering SMD180. Föreläsning 8: Listor

Tentamen i Algoritmer & Datastrukturer i Java

Idag: Dataabstraktion

Föreläsning 9 Innehåll

Typsystem. Typsystem... Typsystem... Typsystem... 2 *

List.java. List.java. Printed by Tom Smedsaas

Komma igång med Allegro Common Lisp

Träd, binära träd och sökträd. Koffman & Wolfgang kapitel 6, avsnitt 1 4

Ekvivalensrelationer

Typsystem. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 19

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

Datalogi, grundkurs 1

Datalogi, grundkurs 1

allt.cl Page 1 of 17 Date: torsdag 7 december 2006

Föreläsning 4 Datastrukturer (DAT037)

TDDC74 Programmering: Abstraktion och modellering Dugga 3, kl 14 16, 25 mars 2015

Dataabstraktion. TDDD73 Funktionell och impterativ programmering i Python Föreläsning 12. Peter Dalenius Institutionen för datavetenskap

Dagens föreläsning Programmering i Lisp. - Bindning av variabler (avs 14.6) fria variabler statisk/lexikalisk och dynamisk bindning

Datastrukturer och algoritmer. Innehåll. Trie. Informell specifikation. Organisation av Trie. Föreläsning 13 Trie och Sökträd.

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

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

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

Dugga Datastrukturer (DAT036)

Funktionell programmering DD1361

Föreläsning 3 Datastrukturer (DAT037)

SORTERING OCH SÖKNING

Föreläsning Datastrukturer (DAT036)

TDDC74 Programmering: Abstraktion och modellering Dugga 2, kl 8 10, 3 mars 2016

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

Transkript:

Symbolisk data (1 2 3 4) (a b c d) (jacek johan david) ((jacek "jacek@cs.lth.se") (johan "johang@cs.lth.se") (david "dat99dpe@ludat.lth.se")) ((anna 13) (per 11) (klas 9) (eva 4)) (+ (* 23 4) (/ y x)) (define (fak n) (if (= n 0) 1 (* n (fak (- n 1))))) quote (define a 1) (define b 2) > (list a b) (1 2) > (list a b) (a b) > (list a b) (1 b) Ekvivalenta uttryck: (list a b) (list (quote a) (quote b)) Jacek Malec, Dept. of Computer Science, Lund University 3 Jacek Malec, Dept. of Computer Science, Lund University 4 Nyttiga funktioner eq? jamför två symboler och svarar på frågan: Är det en och samma symbol? > (car (a b c)) a >(cdr (a b c)) (b c) > () () > (eq? a b) #f > (eq? a a) #t > (eq? 1 1) #t > (eq? 1 1.0) #f > (= 1 1.0) #t

memq Symbolisk deriviering (memq symbol lista) Finns symboln medinilistan? (define (memq item x) (cond ((null? x) #f) ((eq? item (car x)) x) (else (memq item (cdr x))))) > (memq apple (pear banana prune)) > (memq apple (x (apple sauce) y apple pear)) > (memq red ((red shoes) (blue socks))) > (memq red (red shoes blue socks)) (ax 2 + bx + c) =2ax + b Man deriverar genom att rekursivt använda följande regler: d(u + v) d(uv) dc =0 =1 = du + dv = v(du dv )+u( ) Studera exemplet själv! Jacek Malec, Dept. of Computer Science, Lund University 7 Jacek Malec, Dept. of Computer Science, Lund University 8 Mängder Val av representation En mängd är en samling (skilda) objekt. {1, 2, 3,a,c,jacek} = = {1, 2, 3, 1, 2, 3, 1, 2, 3,a,jacek,jacek,c} Mängdoperationer: summa (union) A B (t.ex. {1, 2, 3} {3, 4, 5} = {1, 2, 3, 4, 5}) snitt A B (t.ex. {1, 2, 3} {3, 4, 5} = {3}) tillhörighet x A (t.ex. 1 {1, 2, 3}) tom mängd Vi behöver följande operationer: union-set intersection-set element-of-set? adjoin-set Hur skall vi implementera de? Hur som helst, så att specifikationen är uppfylld!

Mängder som oordnade listor Formell specifikation: För varje mängd S och varje element x, (element-of-set? x (adjoin-set x S)) är sann; För alla mängder S och T och varje objekt x, (element-of-set? x (union-set S T)) är lika med (or (element-of-set? x S) (element-of-set? x T)); För alla mängder S och T och varje objekt x, (element-of-set? x (intersection-set S T)) är lika med (and (element-of-set? x S) (element-of-set? x T)); För varje objekt x, (element-of-set? ()) är falsk. x Antagande: element upprepas ej! (define (element-of-set? x set) (cond ((null? set) #f) ((equal? x (car set)) #t) ; godtyckliga element! (else (element-of-set? x (cdr set))))) (define (adjoin-set x set) (if (element-of-set? x set) set (cons x set))) (define (intersection-set set1 set2) (cond ((or (null? set1) (null? set2)) ()) ((element-of-set? (car set1) set2) (cons (car set1) (intersection-set (cdr set1) set2))) (else (intersection-set (cdr set1) set2)))) Jacek Malec, Dept. of Computer Science, Lund University 11 Jacek Malec, Dept. of Computer Science, Lund University 12 Mängder som ordnade listor ordning vi antar att vi kan jamföra alla objekt med varandra: < m, = m,> m Här begränsar vi oss till tal (d.v.s. <, =,>). {3, 10, 6, 1} = (1 3 6 10) (define (element-of-set? x set) (cond ((null? set) #f) ((= x (car set)) #t) ((< x (car set)) #f) (else (element-of-set? x (cdr set))))) (define (intersection-set set1 set2) (if (or (null? set1) (null? set2)) () (let ((x1 (car set1)) (x2 (car set2))) (cond ((= x1 x2) (cons x1 (intersection-set (cdr set1) (cdr set2)))) ((< x1 x2) (intersection-set (cdr set1) set2)) ((< x2 x1) (intersection-set set1 (cdr set2))))))) intersection-set har komplexitet Θ(n)!

Mängder som binära träd Vårt krav: att varje element i det vänstra delträdet är mindre än roten och att varje element i det högra delträdet är större än roten. Exempel: {2, 4, 6, 8, 10, 12} Balanserade träd ger bättre komplexitet! (Θ(log(n))) (define (entry tree) (car tree)) (define (left-branch tree) (cadr tree)) (define (right-branch tree) (caddr tree)) (define (make-tree entry left right) (list entry left right)) (define (element-of-set? x set) (cond ((null? set) #f) ((= x (entry set)) #t) ((< x (entry set)) (element-of-set? x (left-branch set))) ((> x (entry set)) (element-of-set? x (right-branch set))))) (define (adjoin-set x set) (cond ((null? set) (make-tree x () ())) ((= x (entry set)) set) ((< x (entry set)) (make-tree (entry set) (adjoin-set x (left-branch set)) (right-branch set))) ((> x (entry set)) (make-tree (entry set) (left-branch set) (adjoin-set x (right-branch set)))))) Jacek Malec, Dept. of Computer Science, Lund University 15 Jacek Malec, Dept. of Computer Science, Lund University 16 Huffmans kodningsträd Svenska tecken brukar kodas m.h.a. ISO-8859-1 med 8 bitar - vi kan representera 256 tecken medensådan kod. För enkelhetens skull kodar vi endast A - F A 000 B 001 C 010 D 011 E 100 F 101 G 110 H 111 Ett meddelande: ACBGAACFHBACHFE kodas som: 000010001110000000010101111001000010111101100 45 bitar kod med konstant-längd Koder med variabel längd A-4gånger C-3gånger B, F, H - 2 gånger E, G - 1 gång D-0gånger Ett förslag: A0 C 100 B 1010 D 1011 E 1100 F 1101 G 1110 H 1111

Meddelandet: ACBGAACFHBACHFE Kodas nu som: 010010101110001001101111110100100111111011100 Också 45bitar. Men ett meddelande: AABACAAF skulle kodas som: 0010100100001101 med 16 bitar, istället av 24! Prefix-koder Huffman kodning Huffman kodning Trädrepresentation (define (make-leaf symbol weight) (list leaf symbol weight)) (define (leaf? object) (eq? (car object) leaf)) (define (symbol-leaf x) (cadr x)) (define (weight-leaf x) (caddr x)) Jacek Malec, Dept. of Computer Science, Lund University 19 Jacek Malec, Dept. of Computer Science, Lund University 20 Att skapa träd: (define (make-code-tree left right) (list left right (append (symbols left) (symbols right)) (+ (weight left) (weight right)))) (define (left-branch tree) (car tree)) (define (right-branch tree) (cadr tree)) (define (symbols tree) (if (leaf? tree) (list (symbol-leaf tree)) (caddr tree))) (define (weight tree) (if (leaf? tree) (weight-leaf tree) (cadddr tree))) Avkodning (define (decode bits tree) (define (decode-1 bits current-branch) (if (null? bits) () (let ((next-branch (choose-branch (car bits) current-branch))) (if (leaf? next-branch) (cons (symbol-leaf next-branch) (decode-1 (cdr bits) tree)) (decode-1 (cdr bits) next-branch))))) (decode-1 bits tree)) (define (choose-branch bit branch) (cond ((= bit 0) (left-branch branch)) ((= bit 1) (right-branch branch)) (else (error "bad bit -- CHOOSE-BRANCH" bit))))

Hjälpfunktioner (define (adjoin-set x set) (cond ((null? set) (list x)) ((< (weight x) (weight (car set))) (cons x set)) (else (cons (car set) (adjoin-set x (cdr set)))))) (define (make-leaf-set pairs) (if (null? pairs) () (let ((pair (car pairs))) (adjoin-set (make-leaf (car pair) (cadr pair)) (make-leaf-set (cdr pairs))))))