Datastrukturer och algoritmer Föreläsning 3
Datastrukturer och algoritmer VT08 Innehåll Fält och Tabell Att läsa: Kapitel 5-6
Datastrukturer och algoritmer VT08 Fält Modell Schackbräde Organisation n-dimensionellt fält organiserat som rätblock Elementen oalla elementen värden har samma datatyp otillåts innehålla odefinierade elementvärden Koordinaterna (index) oär en n-tippel om fältet har n dimensioner otypen måste vara diskret linjärt ordnad –oftast heltal osamma typ på alla ”axlar”
Datastrukturer och algoritmer VT08 Fält Är en statisk datatyp Hela strukturen är fixerad inte bara storleken oElementen har bestämd plats och flyttas inte, spelar ingen roll om man tar bort eller sätter in element Kan ha odefinierade elementvärden, fyller på strukturen eftehand oKompilatorn upptäcker om man av misstag försöker avläsa värden som är odefinierade oDe flesta programspråk tillåter helt eller delvis tomma Fält Elementvärdet kan vara vilken datatyp som helst inklusive en Länk.
Datastrukturer och algoritmer VT08 Specifikation Måste bestämma i förväg Datatypen för elementvärdena Antal dimensioner i fältet Datatyp för varje koordinataxel
Datastrukturer och algoritmer VT08 Gränsyta till Fält abstract datatype 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 Notera att inga operationer på index syns (det är indextypens ansvar)
Datastrukturer och algoritmer VT08 Kommentarer till gränsytan Create – lo och hi är motstående ”hörn” i fältet, närmast origo och längst ifrån Set-value – står ej i specifikationen vad som händer om index ligger utanför arrayen Has-value – saknas ofta i fysiska fälttyper Inspect-value – står ej i specifikationen vad som händer om index ligger utanför arrayen eller om värdet odefinierat
Datastrukturer och algoritmer VT08 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 Kan bevisa att det vi tänkte göra med operationerna faktiskt också händer
Datastrukturer och algoritmer VT08 Formell specifikation för Fält Bild från sidan 95 i Janlert L-E., Wiberg T., Datatyper och algoritmer, Studentlitteratur, 2000
Datastrukturer och algoritmer VT08 Övning sid 98 5.4: Härled värdet av Low(d) 5.5: Härled värdet av Inspect-value((2), d) d är fältet [, 4, 2] som man får via operationssekvensen d = Set-value((3), 2, Set-value((2), 4, Create((1),(3))))
Datastrukturer och algoritmer VT08 Konstruktion av Fält Fysisk datatyp i många språk Enkelt eftersom traditionella datorer har minnet organiserat som ett 1-dimensionellt fält I många äldre språk den enda mer avancerade datatypen oDärför viktigt hur man konstruerar ADT i fält. N-dim Fält som 1-dim Fält ”vecklar” ut fältet Matriser lagras radvis
Datastrukturer och algoritmer VT08 Konstruktion av Fält Fält som Lista Vektorer kan konstrueras som Lista Matris kan konstrueras som Lista av listor Fält som Lista är inte så effektivt! Varför?
Datastrukturer och algoritmer VT08 Konstruktion av Fält Gles matris – stort antal element är odefinierade eller har värdet noll Mycket vanligt inom teknisk-vetenskapliga beräkningar Kan vara så stora att det är omöjligt att lagra hela matrisen i minnet Konstrueras som Vektor av Tabell Sparar utrymme Sparar tid
Datastrukturer och algoritmer VT08 Tillämpningar Fält Tekniska beräkningar Geometriska transformationer oRotation, translation, skalning Linjära ekvationssystem Kantdetektering i bilder Spelmatriser Sidorna beskriver tillämpningar
Datastrukturer och algoritmer VT08 Tabell Modell Uppslagsbok bestående av ett uppslagsord (nyckel) och tillhörande text (översättning/förklaring/synonymer). Organisation Ändlig avbildning (mappning) av argument (nycklar) på värden Behöver inte ha ordnade element Dynamisk datatyp
Datastrukturer och algoritmer VT08 Gränsyta till Tabell abstract datatype Table(arg,val) Empty() → Table(arg,val) Insert(x:arg,y:val,t:Table(arg,val)) → Table(arg,val) Isempty (t:Table(arg,val)) → Bool Lookup (x:arg, t:Table(arg,val)) → (Bool,val) Remove (x:arg, t:Table(arg,val)) → Table(arg,val)
Datastrukturer och algoritmer VT08 Kommentarer till gränsytan Insert(x,y,t) – utökar eller omdefinierar tabellen t så att x avbildas på värdet y Lookup(x, t) – om argumentet/nyckeln finns i tabellen returneras sant och det tillhörande värdet annars returneras falskt. I fält motsvaras detta av att man slår ihop Has- value och Inspect-value till en operation. Lookup är dyr operaration och svårt motivera en dubblering av detta ( has-value+inspect-value)
Datastrukturer och algoritmer VT08 Insättningar Två huvudalternativ Sätt in det nya paret först i listan oUtökning Kolla om det finns par med samma argument oModifiering Dubbletthantering måste alltid göras... Antingen vid insättning eller borttagning
Datastrukturer och algoritmer VT08 Fält vs Tabell Likheter Index svarar mot elementvärde i ett fält Argumentet/nyckeln svarar mot tabellvärde i en tabell Skillnader Tabell oHar inga krav på argument/nyckeltypen oÄr en dynamisk datatyp Fält oIndex måste vara diskret linjärt ordnad oÄr en statisk datatyp
Datastrukturer och algoritmer VT08 Konstruktion av tabell som... Fält Lista av par ,,..., Riktad Lista Hashtabell Binärt sökträd
Datastrukturer och algoritmer VT08 Konstruktion – Fält Tabell kan konstrueras som Fält om: nyckeltypen är diskret linjärt ordnad det går att hitta en konstant av fältets elementvärdestyp som kan symbolisera ett odefinierat tabellvärde nycklarna är relativt väl samlade och inte utspridda
Datastrukturer och algoritmer VT08 Tabell (Övning 12 sid 125) Jämför Fält- respektive Lista som par- konstruktionen Insättningskostnad Avläsning Borttagning När väljer man vad?
Datastrukturer och algoritmer VT08 Tillämpningar Ofta använd datatyp t ex Representera samband mellan objekt Benämna objekt Associera egenskaper hos ett objekt med motsvarande värden Kompilatorer Fält som Tabell
Datastrukturer och algoritmer VT08 Tippel, Post, Relation Associerar argument med värden Tippel består av element (koordinater) Heterogen datatyp Post (record,struct) är som abstrakt datatyp sett samma sak som Tippel. Relation är en egenskap definierad för en grupp av objekt (Mer om detta i kap 16.) Ett relationsobjekt innehåller en mängd n-tippler 2-ställig relation liknar tabell men är mer generell
Datastrukturer och algoritmer VT08 Inför OU2: Jämförelser i Java == jämför objektens minnesadresser inte de faktiska värderna i objekten equals en metod som ärvs från Object jämför objekt men om man inte omdefinierar den så gör den bara == ! compareTo en metod i interfacet Comparable, jämför
Datastrukturer och algoritmer VT08 compareTo, equals Object key; Comparable cKey = Comparable (key); while ((currentNode != null)&& cKey.compareTo(currentNode.getkey())>0) { … } … if ((currentNode !=null) && key.equals(currentNode.getkey())) { … }
Datastrukturer och algoritmer VT08 equals – krav på omdefinering Från Javas API: Indicates whether some other object is "equal to" this one. The equals method implements an equivalence relation on non-null object references: It is reflexive: for any non-null reference value x, x.equals(x) should return true. It is symmetric: for any non-null reference values x and y, x.equals(y) should return true if and only if y.equals(x) returns true. It is transitive: for any non-null reference values x, y, and z, if x.equals(y) returns true and y.equals(z) returns true, then x.equals(z) should return true. It is consistent: for any non-null reference values x and y, multiple invocations of x.equals(y) consistently return true or consistently return false, provided no information used in equals comparisons on the objects is modified. For any non-null reference value x, x.equals(null) should return false.
Datastrukturer och algoritmer VT08 compareTo – krav på omdefinering Från Javas API: Compares this object with the specified object for order. Returns a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object. In the foregoing description, the notation sgn(expression) designates the mathematical signum function, which is defined to return one of -1, 0, or 1 according to whether the value of expression is negative, zero or positive. The implementor must ensure sgn(x.compareTo(y)) == -sgn(y.compareTo(x)) for all x and y. (This implies that x.compareTo(y) must throw an exception iff y.compareTo(x) throws an exception.) The implementor must also ensure that the relation is transitive: (x.compareTo(y)>0 && y.compareTo(z)>0) implies x.compareTo(z)>0. Finally, the implementer must ensure that x.compareTo(y)==0 implies that sgn(x.compareTo(z)) == sgn(y.compareTo(z)), for all z. It is strongly recommended, but not strictly required that (x.compareTo(y)==0) == (x.equals(y)). Generally speaking, any class that implements the Comparable interface and violates this condition should clearly indicate this fact. The recommended language is "Note: this class has a natural ordering that is inconsistent with equals."