Innehåll Datastrukturer och algoritmer Föreläsning 2 Fält Specifikation, Konstruktion och Specifikation, Konstruktion Dynamiska resurser Länk Länkade celler 25 26 Fält Modell Schackbräde Organisation n-dimensionellt fält organiserat som rätblock Tillåts innehålla odefinierade elementvärden Statisk typ Specifikation Måste bestämma i förväg Datatypen för elementvärdena Antal dimensioner fältet Datatyp för varje koordinataxel 27 28 Ingående operationer Gränsyta Konstruktorer Create, Set-value Inspektorer Inspect-value, Has-value, Low, High Gränsyta till Fält Array(val,index)! Create (lo,hi:index) -> Array(val,index) Set-value(i:index,v:val,a:Array(val,index)) ->Array(val,index) Low (a:array(val,index)) -> index High (a:array(val,index)) -> index Has-value (i:index,a:array(val,index))-> Bool Inspect-value (i:index,a:array(val,index))-> val 29 30
Konstruktion av Fält Fysisk datatyp i många språk N-dim Fält som 1-dim Fält vecklar ut fältet Matriser lagras radvis Fält som Lista Vektorer kan konstrueras som Lista Inte så effektiv Matris kan konstrueras som Lista av listor 31 32 Gles matris Gles matris stort antal element är odefinierade eller har värdet noll Implementeras som Vektor av tabell Sparar utrymme Sparar tid Tillämpningar Fält Tekniska beräkningar Geometriska transformationer Rotation, translation, skalning Linjära ekvationssystem Kantdetektering i bilder Spelmatriser 33 34 Länk Gränsyta till Länk Referens, pekare Objekt som refererar till annat objekt Konstrueras oftast som index i fält (kursor) Billigare kopiera länkar till objekt än objekten själva Abstract datatype! Make Nil Isnil Follow Equal Link (obj) (x : obj) -> Link (obj) ( ) -> Link (obj) (l : Link (obj)) -> Bool (l : Link (obj)) -> obj (l1,l2 : Link (obj)) -> Bool 35 36
Dynamiska resurser Gränsyta till 1Cell Skapar dataobjekt för tillfälliga behov Kill- lösgör resurser Jämför med i free C Create - reserverar resurser jämför med malloc, calloc, osv i C Vålnader minne som är avallokerat, men som vi fortfarande refererar till Sophämtning 1Cell(val)! Create () -> 1Cell(val) Set-value(v:val,c:1Cell(val)) -> 1Cell(val) Set-Link (l:link(1cell(val)),c:1cell(val)) -> 1Cell(val) Inspect-value (c:1cell(val))-> val Inspect-link (c:1cell(val))-> Link(1Cell(val)) Kill (c:1cell(val)) 37 38 1Cell i C typedef struct Cell{ DATA data struct Cell *next } Cell; Modell Specialisering av Lista Begränsningar på operationer Linjärt ordnad struktur 39 40 FIFO First In First Out Insättning i slutet av kön Borttagning i början av kön Gränsyta för Queue(val)! Empty () -> Queue(val) Enqueue (v:val,q:queue(val)) -> Queue(val) Front (q:queue(val)) -> val Dequeue (q:queue(val)) -> Queue(val) Isempty (q:queue(val)) -> Bool 41 42
Lista Fronten på kön = början av listan Listan som Fält Komplexiteten Riktad lista med 1-celler Första köelementet länkar till det andra osv Cirkulär Lista med 1-celler Länken i slutet av kön pekar på fronten Cirkulär vektor + Inga omflyttningar - Maximal storlek - Outnyttjat utrymme - Problem skilja en tom kö från en full 43 44 Tillämpningar Buffert Skrivarkö Bredden-först-traversering Modell Papperstrave Specialisering av datatypen Lista Begränsningar på operationer Linjärt ordnad struktur Före / efter relation 45 46 LIFO Last In First Out Insättning, borttagning, avläsning i toppen av stacken Informell specifikation till Empty - konstruerar tom stack Push(v,s) lägger (ett element med värdet) v överst på stacken Top(s) är värdet av det översta elementet på stacken (förutsatt att inte stacken är tom) Pop(s) avlägsnar det översta elementet från stacken (förutsatt att inte stacken är tom) Isempty(s) testar om stacken är tom 47 48
Formell specifikation Uppsättning axiom Beskriver relationer mellan typens olika operationer Axiom kan användas för att göra formella härledningar i datatypen Formell specifikation till Ax 1: Isempty(Empty) Ax 2: Isempty(Push(v,s)) Ax 3: Pop(Push(v,s)) = s Ax 4: Top(Push(v,s)) = v Ax 5: Isempty(s) => Push(Top(s), Pop(s)) = s 49 50 Gränsyta till (val)! Empty () -> (val) Push (v:val,s:(val)) -> (val) Top (s:(val)) -> val Pop (s:(val)) -> (val) Isempty (s:(val)) -> Bool Lista Toppen av stacken = början av listan Lista som fält Komplexitet 51 52 Fält Botten i slutet en läggs i slutet av fältet» Push och Pop!(1)» Inga stora dataomflyttningar Botten i början Möjlighet att ha två stackar i samma fält Länkad Lista Riktad lista med 1-celler Uteslutningar och specialiseringar av operationer!(1) tidskomplexitet 53 54
Tillämpningar Avbryter bearbetning som senare kanske återupptas Återspårning (backtracking) Till senaste gjorda valet Tillämpningar Rekursion Fakultet n! factorial(n)!! if (n<=1) then return 1;!! else return n*factorial(n-1); Evaluering av uttryck 55 56