Datastrukturer och algoritmer
Föreläsning 3 DatastrukturerDatastrukturerochochalgoritmeralgoritmerDatastrukturerochalgoritmer VT08
Innehåll
Fält och Tabell
Att läsa: Kapitel 5-6
Datastrukturerochalgoritmer
DatastrukturerDatastrukturer ochoch algoritmeralgoritmer
VT08
Fält
Modell
¾Schackbräde
Organisation
¾n-dimensionellt fält organiserat som rätblock
¾Elementen
o alla elementen värden har samma datatyp o tillåts innehålla odefinierade elementvärden
¾Koordinaterna (index)
o är en n-tippel om fältet har n dimensioner o typen måste vara diskret linjärt ordnad
– oftast heltal o samma typ på alla ”axlar”
DatastrukturerochalgoritmerDatastrukturerDatastrukturerochochalgoritmeralgoritmer
VT08
Fält
Är en statisk datatyp
¾Hela strukturen är fixerad inte bara storleken o Elementen 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
o Kompilatorn upptäcker om man av misstag försöker avläsa värden som är odefinierade
o De flesta programspråk tillåter helt eller delvis tomma Fält
¾Elementvärdet kan vara vilken datatyp som helst inklusive en Länk.
Datastrukturerochalgoritmer
DatastrukturerDatastrukturer ochoch algoritmeralgoritmer
Specifikation
Måste bestämma i förväg
¾Datatypen för elementvärdena
¾Antal dimensioner i fältet
¾Datatyp för varje koordinataxel
DatastrukturerochalgoritmerDatastrukturerDatastrukturerochochalgoritmeralgoritmer
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)
Datastrukturerochalgoritmer DatastrukturerDatastrukturer ochoch algoritmeralgoritmer
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
DatastrukturerochalgoritmerDatastrukturerDatastrukturerochochalgoritmeralgoritmer
VT08
Formell specifikation för Fält
Bild från sidan 95 i Janlert L-E., Wiberg T., Datatyper och algoritmer, Studentlitteratur, 2000
Datastrukturerochalgoritmer
DatastrukturerDatastrukturer ochoch algoritmeralgoritmer
VT08
Övning 5.4-5.5 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))))
DatastrukturerochalgoritmerDatastrukturerDatastrukturerochochalgoritmeralgoritmer
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
o Dä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
Datastrukturerochalgoritmer
DatastrukturerDatastrukturer ochoch algoritmeralgoritmer
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?
DatastrukturerochalgoritmerDatastrukturerDatastrukturerochochalgoritmeralgoritmer
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
Datastrukturerochalgoritmer DatastrukturerDatastrukturer ochoch algoritmeralgoritmer
VT08
Tillämpningar Fält
Tekniska beräkningar
¾Geometriska transformationer o Rotation, translation, skalning
¾Linjära ekvationssystem
¾Kantdetektering i bilder
¾Spelmatriser
Sidorna 104-116 beskriver tillämpningar
DatastrukturerochalgoritmerDatastrukturerDatastrukturerochochalgoritmeralgoritmer
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
Datastrukturerochalgoritmer
DatastrukturerDatastrukturer ochoch algoritmeralgoritmer
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) DatastrukturerDatastrukturerochochalgoritmeralgoritmerDatastrukturerochalgoritmer
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)
Datastrukturerochalgoritmer
DatastrukturerDatastrukturer ochoch algoritmeralgoritmer
Insättningar
Två huvudalternativ
¾Sätt in det nya paret först i listan o Utökning
¾Kolla om det finns par med samma argument o Modifiering
Dubbletthantering måste alltid göras...
Antingen vid insättning eller borttagning
DatastrukturerochalgoritmerDatastrukturerDatastrukturerochochalgoritmeralgoritmer
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
o Har inga krav på argument/nyckeltypen o Är en dynamisk datatyp
¾Fält
o Index måste vara diskret linjärt ordnad o Är en statisk datatyp
Datastrukturerochalgoritmer DatastrukturerDatastrukturer ochoch algoritmeralgoritmer
VT08
Konstruktion av tabell som...
Fält
Lista av par
¾<arg1, värde1>, <arg2, värde2>,...,<argN,värdeN>
¾Riktad Lista
Hashtabell
Binärt sökträd
DatastrukturerochalgoritmerDatastrukturerDatastrukturerochochalgoritmeralgoritmer
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
Datastrukturerochalgoritmer
DatastrukturerDatastrukturer ochoch algoritmeralgoritmer
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?
DatastrukturerochalgoritmerDatastrukturerDatastrukturerochochalgoritmeralgoritmer
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
Datastrukturerochalgoritmer
DatastrukturerDatastrukturer ochoch algoritmeralgoritmer
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
DatastrukturerochalgoritmerDatastrukturerDatastrukturerochochalgoritmeralgoritmer
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 <, =, >Datastrukturerochalgoritmer DatastrukturerDatastrukturer ochoch algoritmeralgoritmer
VT08
compareTo, equals
Object key;
Comparable cKey = Comparable (key);
while ((currentNode != null)&&
cKey.compareTo(currentNode.getkey())>0) {
… }
…
if ((currentNode !=null) &&
key.equals(currentNode.getkey())) {
… }
DatastrukturerochalgoritmerDatastrukturerDatastrukturerochochalgoritmeralgoritmer
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.
Datastrukturerochalgoritmer
DatastrukturerDatastrukturer ochoch algoritmeralgoritmer
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."