Upload
webb
View
42
Download
2
Embed Size (px)
DESCRIPTION
Datastrukturer och algoritmer. Föreläsning 3. Innehåll. Fält och Tabell Att läsa: Kapitel 5-6. Fält. Modell Schackbräde Organisation n-dimensionellt fält organiserat som rätblock Elementen alla elementen värden har samma datatyp tillåts innehålla odefinierade elementvärden - PowerPoint PPT Presentation
Citation preview
Datastrukturer och algoritmer
Föreläsning 3
Dat
astr
ukt
ure
r o
ch a
lgo
ritm
erD
atas
tru
ktu
rer
och
alg
ori
tmer
Dat
astr
ukt
ure
r o
ch a
lgo
ritm
erD
atas
tru
ktu
rer
och
alg
ori
tmer
VT08
Innehåll
Fält och Tabell
Att läsa: Kapitel 5-6
Dat
astr
ukt
ure
r o
ch a
lgo
ritm
erD
atas
tru
ktu
rer
och
alg
ori
tmer
Dat
astr
ukt
ure
r o
ch a
lgo
ritm
erD
atas
tru
ktu
rer
och
alg
ori
tmer
VT08
Fält Modell
Schackbräde Organisation
n-dimensionellt fält organiserat som rätblock Elementen
o alla elementen värden har samma datatypo tillåts innehålla odefinierade elementvärden
Koordinaterna (index)o är en n-tippel om fältet har n dimensionero typen måste vara diskret linjärt ordnad
– oftast heltalo samma typ på alla ”axlar”
Dat
astr
ukt
ure
r o
ch a
lgo
ritm
erD
atas
tru
ktu
rer
och
alg
ori
tmer
Dat
astr
ukt
ure
r o
ch a
lgo
ritm
erD
atas
tru
ktu
rer
och
alg
ori
tmer
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.
Dat
astr
ukt
ure
r o
ch a
lgo
ritm
erD
atas
tru
ktu
rer
och
alg
ori
tmer
Dat
astr
ukt
ure
r o
ch a
lgo
ritm
erD
atas
tru
ktu
rer
och
alg
ori
tmer
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
Dat
astr
ukt
ure
r o
ch a
lgo
ritm
erD
atas
tru
ktu
rer
och
alg
ori
tmer
Dat
astr
ukt
ure
r o
ch a
lgo
ritm
erD
atas
tru
ktu
rer
och
alg
ori
tmer
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)
Dat
astr
ukt
ure
r o
ch a
lgo
ritm
erD
atas
tru
ktu
rer
och
alg
ori
tmer
Dat
astr
ukt
ure
r o
ch a
lgo
ritm
erD
atas
tru
ktu
rer
och
alg
ori
tmer
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
Dat
astr
ukt
ure
r o
ch a
lgo
ritm
erD
atas
tru
ktu
rer
och
alg
ori
tmer
Dat
astr
ukt
ure
r o
ch a
lgo
ritm
erD
atas
tru
ktu
rer
och
alg
ori
tmer
VT08
Formell specifikation för Fält
Bild från sidan 95 i Janlert L-E., Wiberg T., Datatyper och algoritmer, Studentlitteratur, 2000
Dat
astr
ukt
ure
r o
ch a
lgo
ritm
erD
atas
tru
ktu
rer
och
alg
ori
tmer
Dat
astr
ukt
ure
r o
ch a
lgo
ritm
erD
atas
tru
ktu
rer
och
alg
ori
tmer
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))))
Dat
astr
ukt
ure
r o
ch a
lgo
ritm
erD
atas
tru
ktu
rer
och
alg
ori
tmer
Dat
astr
ukt
ure
r o
ch a
lgo
ritm
erD
atas
tru
ktu
rer
och
alg
ori
tmer
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
datatypeno 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
Dat
astr
ukt
ure
r o
ch a
lgo
ritm
erD
atas
tru
ktu
rer
och
alg
ori
tmer
Dat
astr
ukt
ure
r o
ch a
lgo
ritm
erD
atas
tru
ktu
rer
och
alg
ori
tmer
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?
Dat
astr
ukt
ure
r o
ch a
lgo
ritm
erD
atas
tru
ktu
rer
och
alg
ori
tmer
Dat
astr
ukt
ure
r o
ch a
lgo
ritm
erD
atas
tru
ktu
rer
och
alg
ori
tmer
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
Dat
astr
ukt
ure
r o
ch a
lgo
ritm
erD
atas
tru
ktu
rer
och
alg
ori
tmer
Dat
astr
ukt
ure
r o
ch a
lgo
ritm
erD
atas
tru
ktu
rer
och
alg
ori
tmer
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
Dat
astr
ukt
ure
r o
ch a
lgo
ritm
erD
atas
tru
ktu
rer
och
alg
ori
tmer
Dat
astr
ukt
ure
r o
ch a
lgo
ritm
erD
atas
tru
ktu
rer
och
alg
ori
tmer
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
Dat
astr
ukt
ure
r o
ch a
lgo
ritm
erD
atas
tru
ktu
rer
och
alg
ori
tmer
Dat
astr
ukt
ure
r o
ch a
lgo
ritm
erD
atas
tru
ktu
rer
och
alg
ori
tmer
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)
Dat
astr
ukt
ure
r o
ch a
lgo
ritm
erD
atas
tru
ktu
rer
och
alg
ori
tmer
Dat
astr
ukt
ure
r o
ch a
lgo
ritm
erD
atas
tru
ktu
rer
och
alg
ori
tmer
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)
Dat
astr
ukt
ure
r o
ch a
lgo
ritm
erD
atas
tru
ktu
rer
och
alg
ori
tmer
Dat
astr
ukt
ure
r o
ch a
lgo
ritm
erD
atas
tru
ktu
rer
och
alg
ori
tmer
VT08
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
Dat
astr
ukt
ure
r o
ch a
lgo
ritm
erD
atas
tru
ktu
rer
och
alg
ori
tmer
Dat
astr
ukt
ure
r o
ch a
lgo
ritm
erD
atas
tru
ktu
rer
och
alg
ori
tmer
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 o Har inga krav på argument/nyckeltypeno Är en dynamisk datatyp
Fält o Index måste vara diskret linjärt ordnado Är en statisk datatyp
Dat
astr
ukt
ure
r o
ch a
lgo
ritm
erD
atas
tru
ktu
rer
och
alg
ori
tmer
Dat
astr
ukt
ure
r o
ch a
lgo
ritm
erD
atas
tru
ktu
rer
och
alg
ori
tmer
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
Dat
astr
ukt
ure
r o
ch a
lgo
ritm
erD
atas
tru
ktu
rer
och
alg
ori
tmer
Dat
astr
ukt
ure
r o
ch a
lgo
ritm
erD
atas
tru
ktu
rer
och
alg
ori
tmer
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
Dat
astr
ukt
ure
r o
ch a
lgo
ritm
erD
atas
tru
ktu
rer
och
alg
ori
tmer
Dat
astr
ukt
ure
r o
ch a
lgo
ritm
erD
atas
tru
ktu
rer
och
alg
ori
tmer
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?
Dat
astr
ukt
ure
r o
ch a
lgo
ritm
erD
atas
tru
ktu
rer
och
alg
ori
tmer
Dat
astr
ukt
ure
r o
ch a
lgo
ritm
erD
atas
tru
ktu
rer
och
alg
ori
tmer
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
Dat
astr
ukt
ure
r o
ch a
lgo
ritm
erD
atas
tru
ktu
rer
och
alg
ori
tmer
Dat
astr
ukt
ure
r o
ch a
lgo
ritm
erD
atas
tru
ktu
rer
och
alg
ori
tmer
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
Dat
astr
ukt
ure
r o
ch a
lgo
ritm
erD
atas
tru
ktu
rer
och
alg
ori
tmer
Dat
astr
ukt
ure
r o
ch a
lgo
ritm
erD
atas
tru
ktu
rer
och
alg
ori
tmer
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 <, =, >
Dat
astr
ukt
ure
r o
ch a
lgo
ritm
erD
atas
tru
ktu
rer
och
alg
ori
tmer
Dat
astr
ukt
ure
r o
ch a
lgo
ritm
erD
atas
tru
ktu
rer
och
alg
ori
tmer
VT08
compareTo, equalsObject key;
Comparable cKey = Comparable (key);
while ((currentNode != null)&& cKey.compareTo(currentNode.getkey())>0)
{
…
}
…
if ((currentNode !=null) && key.equals(currentNode.getkey()))
{
…
}
Dat
astr
ukt
ure
r o
ch a
lgo
ritm
erD
atas
tru
ktu
rer
och
alg
ori
tmer
Dat
astr
ukt
ure
r o
ch a
lgo
ritm
erD
atas
tru
ktu
rer
och
alg
ori
tmer
VT08
equals – krav på omdefineringFrå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.
Dat
astr
ukt
ure
r o
ch a
lgo
ritm
erD
atas
tru
ktu
rer
och
alg
ori
tmer
Dat
astr
ukt
ure
r o
ch a
lgo
ritm
erD
atas
tru
ktu
rer
och
alg
ori
tmer
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."