Introduktion til programmering

Slides:



Advertisements
Lignende præsentationer
Klik på Aktivér redigering på meddelelseslinjen.
Advertisements

Web 2.0 Teoretisk viden.
1 Problemkompleksitet 2 Problemers kompleksitet En ineffektiv algoritme: køretiden vokser eksponentielt med input- størrelsen Et problem, der ikke kan.
Hvordan får jeg lagt First Class programmet ind på min egen computer ??? De følgende sider er en lille anvisning på, hvordan du selv kan installere programmet.
Velkommen til Softwarekonstruktion
07 – Kort om OO Introduktion.
Perspektiverende Datalogi Internetalgoritmer MapReduce Gerth Stølting Brodal.
KONCEPT Klasser og objekter En klasse beskriver et World ArrayList
Datastrukturer Simple-type structs
NetBeans Installation og brug.
Array vs. ArrayList. Arrays Et array er en struktureret metode til at gemme flere værdier af den samme datatype. Data’en i et array ligger op ad hinanden.
VOOP, 8 april Refleksion i objekt orienterede programmeringssprog Mandag 8/ Kasper Østerbye.
FEN Diskret matematik/Seminar 3 - proofs 1 Beviser Et bevis er en argumentation, som overbeviser om, at en påstand er sand, påstanden kaldes.
Begreber og Redskaber 8. Plan for idag Sortering fortsat Comparable Søgning –Lineær søgning –Binær søgning.
Søgning & sortering Intro søgning Lineær søgning Binær søgning
GP5, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 5 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder.
MM4 Algoritmiske grundprincipper. MM1 Lister, stakke og køer. MM2 Hash-tabeller og Træer. MM3 Sortering.MM4 Søgning.MM5.
GP12, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 12 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi.
FEN IntroJava AAU1 Java grundelementer Variable og datatyper Sætninger og udtryk Metoder.
Algoritmer og Datastrukturer 1 Binære Søgetræer [CLRS, kapitel 12] Gerth Stølting Brodal.
FEN Rekursion og induktion1 Induktion og (især) rekursion Mange begreber defineres ud fra en basis og så en gentagen anvendelse af et antal regler.
Datastrukturer og Collections Rasmus D. Lehrmann DM
Rapporter (Access, del 5). RHS – Informationsteknologi – Udgangspunkt Vi har oprettet en database Vi har defineret en eller flere tabeller, og.
Lektion 7 Læsestof: Kopier fra Caranno
Fundamentale datastrukturer
GP 8, 24/ Grundlæggende programmering Efterår 2001 Forelæsning 8 onsdag 24/ kl. 9:15 – 12:00.
FEN KbP/seminar2: design11 Kontraktbaseret programmering Seminar 2 Klassedesign – grundprincipper Eksempler: Stack Dictionary.
Algoritmer og Datastrukturer 1
Design, verifikation og analyse
1 Design, analyse og verifikation. 2 Design Bevisteknikker Design ved hjælp at matematisk induktion Analyse O-notation Logaritmer Binær søgning Verifikation.
Objekter og klasser Rasmus D. Lehrmann DM
Grafalgoritmer II.
Algoritmer og Datastrukturer 1 Binære Søgetræer [CLRS, kapitel 12] Gerth Stølting Brodal.
1 Sortering. 2 Sortering ved fletning (merge-sort) 7 2 | 9 4  | 2  2 79 | 4   72  29  94  4.
1 Fundamentale datastrukturer. 2 Definitioner: abstrakt datatype, datastruktur Elementære datastrukturer og abstrakte datatyper : arrays, stakke, køer,
Repetition: Introduktion til OOP med C# og .NET
Procestræ under afvikling af cp init login shell cp cp src dest.
DIEB4.1 Kursusgang 4 Oversigt: Sidste kursusgang Opgaver Aktivitet 2: Generer design (fortsat) Design af interaktionselementer.
Paradigmer i Programmering 2. Sammensatte typer Tupler og lister Programmering med rekursion Programmering med pipe-lines Programmering med polymorfe.
Paradigmer i Programmering 1. Program for idag : Funktioner og udtryk i SML : Øvelse : Frokost – 14.00: Deklarative.
FEN KbP/seminar2: design21 Kontraktbaseret programmering Seminar 2 Klassedesign: Immutable lister Queue Shallowcopy og alkvantoren.
Paradigmer i Programmering 1. Plan for kurset 4 x Mads R, 4 x Torben B, 2 x opgave MR: Funktionsprogrammering, SML TB: Logikprogrammering, Prolog Opgave:
1 Implementering af fundamentale datastrukturer. 2 Stakke og køer Array-repræsentation Liste-repræsentation Hægtede lister Træer Terminologi Traversering.
03 – Udtryk og metoder. 2 NOEA2009Java-kursus – Udtryk og metoder Udtryk i Java Java har standard udtrykene… Værditildeling Subrutiner og funktionskald.
Hvad består en distribueret applikation af ? Processer der kører på hver deres maskine Tråde - 1 eller flere "letvægtsprocesser" per proces Objekter i.
Grundlæggende programmering Forår 2002
Begreber og Redskaber 11. Plan for idag Lidt afrunding: Collections Framework i Java Noget om oversættere og sprog Evaluering Sidste gang øvelser før.
Paradigmer i Programmering 3. Højere ordens funktioner Idag: Højere ordens funktioner Algebraiske datatyper Næste gang: I/O, Filer, interaktive programmer.
Effective Java Blå gruppe. Item 18: Interfaces frem for abstrakte klasser Kan implementeres i klasser der ikke nedarver Eksisterende klasser kan nemt.
Søgning.  Michael E. Caspersen, 2000Introducerende objektorienteret programmeringSøgning.2 Søgeproblemer... Søgning efter fil(er) Søgning i databaser.
DAIMIIntroducerende objektorienteret programmering4B.1 Typer og tilstand i Java Typer, tilstand, erklæring, variable, primitive datatyper, reference- og.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering7B.1 Søgning.
DAIMIIntroducerende objektorienteret programmering3B.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
 Henrik B. Christensen, 1999Introducerende objektorienteret programmering8B.1 Interfaces En ren kontrakt.
 Jens Bennedsen, 2003Introducerende objektorienteret programmeringinterfaces.1 Interfaces En ren kontrakt.
DAIMIIntroducerende objektorienteret programmering4B.1 Grundlæggende og Reference Typer i Java Typer, tilstand, erklæring, reference- og værdi semantik,
Interfaces Afkobling af programkomponenter (eksempel: Comparable)
Programmering med interfaces Separering af specifikation, anvendelse og implementation.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
 Jens Bennedsen 2001Multimedie programmering10B.1 Interfaces En ren kontrakt.
DAIMIIntroducerende Objektorienteret Programmering8B.1 Interfaces En ren kontrakt.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
I o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering7B.1 Søgning.
Abstraktioner.
Algoritmer og Datastrukturer 1
Algoritmer og Datastrukturer 1
Algoritmer og Datastrukturer 1
Dokumentation.
Programmering.
Grundlæggende Algoritmer og Datastrukturer
Præsentationens transcript:

Introduktion til programmering Uge 43 Computer Science, kap 5 + 8 (minus kap 8.6).

Sidste gang Funktioner som metode til at skrive anvendelsesorienterede programmer Metoderne i et modul kan tolkes som teknisk implementering når vi læser modulet Men de kan tolkes som beskrivelser af anvendelsesområdet når vi blot bruger modulet Indkapsling af implementeringsdetaljer. Netværk og netværksopbygning Protokoller, smtp, http, ftp, pop3 osv. Netværksprogrammering i Python, smtp, http Operativsystemer (nåede vi ikke), styring af filsystem, multiple processer osv.

Opgaver mm Når I afleverer opgaver skal jeg have jeres tilrettede databasemodul. I skal aflevere så meget at jeg kan køre jeres program. Jeg ved godt at der er problemer med serveren, men det skulle gerne virke nu (håber vi, det gjorde det i går)

Plan Øvelse 2 Algoritmer Øvelse 1 Definition Opbygning Pseudokode (teoretisk) Analyse Kompleksitet Eksempler Binær søgning Øvelse 1 Rekursion (algoritmisk løsningsmodel) Generering af tekster Datastrukturer Userdefined ADT (abstract data type) Enkeltkædede lister, dobbeltkædede lister Stakke, køer Træer Øvelse 2

Algoritmer 1 Der er forskellige definitioner Stort set konsensus om at: En algoritme genererer en ordnet, entydig og endelig sekvens af operationer der med garanti slutter Ordnet Skridt efter hinanden, evt repetitioner Entydig Ingen valgfrihed (deterministisk) Ingen flertydighed Endelig Den vil slutte ... men måske først om 1000 år ... Kogebøger, strikkeopskrifter, how-to etc. Muslingeprogrammet er en algoritme

Algoritmer 2 En algoritme i datalogien er en generel metode til at løse et bestemt problemtype Eks. søge i en liste, sortere en liste. “Et program = en algoritme” er noget sludder Programmer repræsenterer mange algoritmer der virker sammen. Der findes mange algoritmer til at løse det samme problem Lineær og binær søgning er to forskellige algoritmer De løser problemet at finde et element i en liste Forskellige karakteristika Tid, plads Forskellige datatyper træer, lister

Algoritmer, opbygning Algoritmer er sproguafhængige Kan beskrives i mange forskellige sprog rettet mod mange forskellige fortolkere Kan beskrives på en stiliseret sprogform, pseudokode Pseudokode er en notationsform skrevet for en menneskelig fortolker men orienteret mod omskrivning i et programmeringssprog der kan læses af maskiner Pseudokode kan Implementeres på mange måder så den kan køre på en maskine Pseudokode beskriver generel struktur, ikke detailjer

Muslingeeksemplet Så længe der er muslinger i spanden: Tag en musling op af spanden Hvis muslingen er lukket så: Smid den i gryden Ellers: Smid den i affaldsposen Struktureret dansk Viser struktur men ingen detaljer Vælger danske konstruktioner der har en analog til programmeringssprog Når vi forklarer hvordan et loop fungerer er det også seudokode

Muslingeeksemplet 2 CS’s notation Fordel (A, B, C) Ligner et programmeringssprog lidt mere () markerer afsnit der skal beskrives mere nøjagtigt Angiver hvilket input og output algoritmen skal have Fordel (A, B, C) Input: en liste A af ting og to tomme lister B og C Output: A er tom. Tingene er fordelt på B og C while (der er ting i A) do: (Tag en ting op af A) Hvis (tingen er lukket) så: (Læg den i B) Ellers: (Læg den i C)

I Python def fordel(A,B,C): while A <> []: enTing = A[0] if enTing == 0: B.append(enTing) else: C.append(enTing) >>> A = [1,0,1,0,1,1,0] >>> B = [] >>> C = [] >>> fordel(A,B,C) >>> A [] >>> B [0, 0, 0] >>> C [1, 1, 1, 1]

I Java I java ser det noget anderledes ud men det er den samme algoritme vi har implementeret. Javaprogram

Et endnu mere formelt eks Finder det største element i en liste Algorithm listMax (A, n): Input: en liste A med n ≥1 tal Output: det største element i A currentMax ←A[0] for i ←1 to n-1 do if currentMax < A[i] then currentMax ←A[i] return currentMax

I Python def listMax(A): currentMax = A[0] for i in range(1, len(A)): if currentMax < A[i]: currentMax = A[i] return currentMax >>> listMax([1,3,2,4,9,4]) 9 >>>

Guideline Udvikl algoritmen i struktureret dansk eller en lidt mere formel pseudokode Check at logikken er OK Oversæt til programmeringssprog og test algoritmen på eksempler Ret fejl i logik i implementering Publicer!

Algoritmer, analyse Væsentligt område af datalogien Analyse af korrekthed og udførselstid Kræver følgende: Sprog til at beskrive algoritmer Pseudokode eller struktureret dansk En model for beregninger “Primitive operationer” (f.eks. en sammenligning) En metrik Store Θ Hvorfor? For at være maskinuafhængig

Primitive operationer Tildelingsoperation currentMax = A[0] Metodekald / funktionskald listMax([1,3,2,4,9,4]) Aritmetisk operation A = A+1 Sammenligning currentMax < A[i]: Indeksering A[i] Returnere fra en metode return currentMax

Eksempel ListMax initialisering : i= 1 1 operation initialisering: currentMax = A[0] 2 operationer Sammenligning i<=n n operationer Løkken udføres n-1 gange: currentMax < A[i] Muligvis: currentMax = A[i] i = i+1 Løkken indeholder 4 eller 6 operationer Returnering af værdi: return currentMax def listMax(A,n): i = 1 currentMax = A[i] while i <= n: if currentMax < A[i]: i = i+1 return currentMax X = [1,4,3,5,7,9,10] print listMax(X,len(X)-1)

Kompleksitet For input n Konstanter smides væk Best case: Hvis der aldrig sker noget med currentMax 2+1+n+4(n-1) +1 = 5n Worst case: Hvis der altid sker noget med CurrentMax 2+1+n+6(n-1)+1 = 7n-2 Konstanter smides væk O(n) Lineær udførelsestid, tiden vokser med inputtet

Store O Store O betyder: O(n): den anden funktion er lineær En funktion er “mindre end eller lig med” en anden funktion der udvikler sig på en bestemt måde O(n): den anden funktion er lineær Logaritmisk: O(log n) - binær søgning Lineær: O(n) - sekventiel søgning Kvadratisk: O(n2)

Vi ser kun på den generelle kurve Lineær: n Kvadratisk: n2 Logaritmisk: log2 n

Eksempel: Søgning Problem: Givet en mængde data, søg efter et element der opfylder et kriterie Eks: find største element i en liste Algoritmevalg afhænger af egenskaber ved mængden af data Usorteret: sekventiel søgning Sorteret: Binær søgning

Sekventiel søgning Gennemløber hele mængden (listen) en efter en Skal se på alle elementer i det værste tilfælde Lineær Eks: givet en liste, findes elementet med værdien ‘88’ i listen? O(n)

Binær søgning Forudsætter at listen er sorteret!!! Forudsætter man kan indeksere alle indgange direkte (ikke linked lists) Halvering af søgeområdet i hvert skridt O(log n) antal søgninger hvis der er 1024 elementer er max log2(1024) = 10 fordi 210 = 1024 1024, 512, 256, 128, 64, 32, 16, 8, 4, 2

Binær søgning, Pseudokode procedure binSearch(x, nums): Input: sorteret liste nums plus et tal x som vi vil søge på Output: tallets position i listen hvis det findes, ellers -1 low = 0 high = (nummeret på listens sidste element) while (der stadig er noget at søge i) do: mid  (midten af listen afgrænset ved low og high) item  (elementet der ligger i midlten) if x= item then: return mid else if x < item: high  mid – 1 (første halvdel af listen) else: low  mid + 1 (sidste halvdel af listen) return -1

Binær Søgning, Python def binSearch(x, nums): low = 0 high = len(nums)-1 while low <= high: mid = (low + high)/2 item = nums[mid] if x == item: return mid elif x < item: high = mid - 1 else: low = mid + 1 return -1 aList = [1,2,5,7,10, 12, 67, 100] print binSearch(12,aList) print binSearch(234,aList) --- >>> 5 -1

Binær søgning Søgning efter 12 Søgning efter 234 def binSearch(x, nums): low = 0 high = len(nums)-1 while low <= high: mid = (low + high)/2 item = nums[mid] #dump variables print nums, low, mid, item, high if x == item: return mid elif x < item: high = mid - 1 else: low = mid + 1 return -1 nums, low, mid, item, high Søgning efter 12 [1, 2, 5, 7, 10, 12, 67, 100] 0 3 7 7 [1, 2, 5, 7, 10, 12, 67, 100] 4 5 12 7 5 Søgning efter 234 [1, 2, 5, 7, 10, 12, 67, 100] 6 6 67 7 [1, 2, 5, 7, 10, 12, 67, 100] 7 7 100 7 -1 position position værdi position

Forskellen mellem lineær og binær søgning Viser sig først ved store datamængder En liste på 12 000 000 ord Lineær søgning: I snit 6 000 000 sammenligninger Worst case: 12 000 000! Binær søgning Worst case: 24 sammenligninger!

Algoritmer tommelfingerregler Heldigvis er mange af de algoritmer vi skal bruge såsom sortering osv. implementeret i Python så vi ikke selv behøves at gøre det. Eller også er der rig mulighed for at finde eksempler på nettet, så vi ikke skal begynde helt fra bunden Når vi skal lave vores egne algoritmer skal vi ikke i første omgang tænke på hastighed, men bare at få det til at virke. Vi kan altid erstatte en algoritme med en anden, hvis vi finder ud af at den er for langsom eller at der findes andre til at erstatte den med Det er typisk kun i arbejdet med store data-sæt vi skal være opmærksomme

Øvelse 1 Implementer database i MySQL

Rekursion Det at løse en delopgave efter samme metode som hovedopgaven Del og hersk Rejse fra Århus til København Rejse fra Århus til Æbeltoft Rejse fra Æbeltoft til Odden Rejse fra Odden til København Fortælle en historie Fortælle om miljø og personer Fortælle om hovedpersonernes strid Fortælle om udfaldet Meget elegant måde at løse et problem på

Syntaktisk specifikation af programmeringssprog Uddrag fra Pythons specifikation compound_stmt ::= if_stmt | while_stmt | … if_stmt ::= "if" expression ":" suite ( "elif" expression ":" suite )* ["else" ":" suite] suite ::= … |NEWLINE INDENT statement+ DEDENT statement ::= … |compound_stmt Notation ::= betyder ’består af’. | betyder ’eller’ [] betyder frivilligt ()* betyder ’nul eller flere gange’ ()+ betyder ’en eller flere gange’

Effektiv rekursion Fremgangsmåde Basis tilfældet: Involverer ikke rekursion men kun primitive operationer der umiddelbart kan udføres Det rekursive tilfælde: Involverer rekursion men for et simplere problem

Rekursiv binær søgning def binSearchStart(x, nums): print 'binary recursive search after ' + str(x) + ' in ' + str(nums) return binSearchRec(x, nums, 0,len(nums)-1) def binSearchRec(x, nums,low,high): if low <= high: mid = (low + high)/2 item = nums[mid] if x == item: #base case return mid elif x < item: #recursive case return binSearchRec(x, nums, low, mid - 1 ) else: #recursive case return binSearchRec(x, nums, mid+1, high) else: #base case return -1 Basistilfældet: primitiv operation: return True Rekursion 1: en mindre liste Rekursion 2: en mindre liste

Endnu et rekursivt eksempel Er det givne ord et palindrom? def palindrome(string): if(len(string) <= 1): #er længden nul eller én så sandt return True elif string[0] == string[len(string)-1]: #ellers, er den første og sidste karakter ens? return palindrome(string[1:-1]) #hvis ja skær dem fra og kald funktionen igen else: return False if __name__ == "__main__": print palindrome("aibohphobia") >>>True Saippuakivikauppias, Finnish for "soap-stone vendor"

Rekursiv generering af sætninger S ::= N VP NP ::= N | N som VP | at S VP ::= VT NP | VI N ::= Anders | Bent | Christina VT ::= så | hørte | forstod VI ::= løb | sov | lo Kommer som opgave i uge 45 Syntaks: rekursivt tilfælde S Ordbog: basistilfælde VP NP

Eksempler Anders lo Anders så Bent som forstod at Anders lo Christina løb Bent hørte Bent Anders så Bent som hørte Bent Anders sov Christina lo Christina forstod Christina som lo Bent så Bent Christina sov Christina opdagede Bent som så Anders Bent sov Anders så at Anders forstod at Christina sov Anders lo Anders så Bent som forstod at Anders lo Anders forstod Bent Bent opdagede Anders Bent forstod Anders Anders hørte at Bent løb Anders løb Bent hørte Christina som løb Bent forstod Anders som løb Anders opdagede Anders som sov Anders hørte Christina som forstod Bent Anders forstod Christina som løb Bent forstod Christina som sov

Mulig implementering kategori ::= mulighed1 | mulighed2 | … mulighedn def kategori(): choice = random.randint(1,n) if choice == 1: return mulighed1 elif choice == 2: return mulighed2 … else: return mulighedn

Eksempel import random Random tilbyder en række funktioner der har med tilfældighed at gøre Regel: NP ::= N | N som VP | at S Implementering: def NP(): choice = random.randint(1,3) if choice == 1: return N() elif choice == 2: return N()+ ' som' + VP() else: return ' at' + S() Eksempler Anders løb Christina så at Christina løb Anders opdagede Bent som sov Bent så Anders Basistilfælde Rekursivt tilfælde Rekursivt tilfælde

Datatyper

Datatyper Datatyper er Eks. Integers (heltal) Typesystemet kan udvides Mulige værdier, samt relaterede operationer Eks. Integers (heltal) Værdier: alle hele tal fra -∞ til ∞ Reelt: begrænset af maskinen Operationer: +, -, *, / etc. Typesystemet kan udvides Brugerdefinerede typer: sammensatte værdier (og operatoroverloading) Konto: ejer, indestående, renteprocent ADT, Abstrakte Data Typer: brugerdefinerede typer + operationer Konto: ejer, indestående, renteprocent (og) hæve, indsætte, rentetilskrivning Klasser og objekter: ADT + nedarvning I python ligner typer klasser Moduler indeholder ofte klasser man kan bruge

Definition af klasser class Konto: def __init__(self,navn, indestaaende, rentesats): self.navn = navn self.indestaaende = indestaaende self.rentesats = rentesats def indsaet(self,beloeb): self.indestaaende += beloeb def haev(self,beloeb): self.indestaaende -= beloeb def tilSkrivRenter(self): self.indestaaende += self.indestaaende * self.rentesats/100 def udSkrivSaldo(self): print 'Saldo for ' + self.navn print self.indestaaende

Brug af klasser minKonto UML minKonto.indestaaende minKonto.indsaet() >>> minKonto = Konto('Peter Vahlstrup',1000,5) >>> minKonto.udSkrivSaldo() Saldo for Peter Vahlstrup 1000 >>> minKonto.indsaet(200) 1200 >>> minKonto.haev(100) 1100 >>> minKonto.tilSkrivRenter() 1155 >>> minKonto UML Navn Attributter minKonto.indestaaende Metoder minKonto.indsaet()

Lister Værdi: Operationer: nul eller flere elementer Operationer: append(...) count(...) extend(...) index(...) insert(...) pop(...) remove(...) Reverse (...) sort(...) Man skriver navnet på objektet, ’.’, plus operationen x.append(7) Repræsentamen X x.operation() Objekt listeelementer operationer

Typer og instanser Eksperiment <type 'int'> >>> type(int) <type 'type‘> >>> type(type) <type 'type'> >>> type(Konto) <type 'classobj'> >>> type(minKonto) <type 'instance'> Typer og deres medlemmer er forskellige objekter. Forskellen mellem en kageform og en kage. 1 er en instans (er medlem) af typen int. Int er ikke selv en instans of int men af typen type. (men Type er selv en instans of typen Type!)

Bruger-definerede typer Eksempler Enkelt-trådede lister Dobbelt-trådede lister Stakke Køer Træer Skal implementeres ved hjælp af eksisterende operationer Disse skjules for brugeren af typen

Enkelt-trådede lister Skal ikke forveksles med python lister [] En liste er en række elemeter der er kædet sammen. Hvert element indeholder en variabel, next, der peger på næste element i listen, og vil desuden ofte indeholde en anden værdi med data Vi har “adgang” til det første element i listen, og derigennem det næste (Egon Olesen fører til James Bond, der fører til Rambo) Men vi kan ikke gå baglæns (Dirty Harry fører ikke til noget)

Dobbelt-trådede lister Data, next og prev Her kan vi gå begge veje

Stak LIFO Har følgende metoder: push(elem) -> nil: påtag dig ny opgave og udsæt den nuværende pop() -> elem (sletter): afslut nuværende og genoptag afbrudt opgave top() -> elem (sletter ikke): hvad var det jeg var i gang med isEmpty() -> boolean: er jeg færdig for i dag? size() -> integer: hvor mange ting venter?

Kø En kø er FIFO Har følgende metoder: enqueue(elem) -> nil: stil dig i kø dequeue() -> elem at front: betal ved kassen size() -> integer: hvor mange kunder venter? isEmpty() -> boolean: er køen tom?

Træer En datastruktur bestående af en række knuder (noder) Rod Knude En node kan have nul eller flere børn og nul eller én forælder En node uden børn kaldes et blad. Rod Direktør Knude Mellemleder Mellemleder Mellemleder Arbejder Arbejder Arbejder Arbejder Arbejder Arbejder Arbejder Blad

Tolkning af abstrakte datastrukturer Repræsentation Objekt Lister Associationer Stakke Web-browser (LIFO) Køer Køer i supermarkedet (FIFO) Trafikpropper Træer Helheder og dele Overordnet og underordnet

I Python Igen er de fleste af disse strukturer implementeret i python så før man begynder at lave en stak eller en kø (collections modulet) slår man lige op i dokumentationen

Næste gang XHTML og CSS Ved godt det er mange sider Læs overfladisk, det skal mest bruges som opslagsværk

Øvelse 2 Lav de 8 forskellige kald til databasen