27
Datastrukturer och algoritmer Föreläsning 3

Datastrukturer och algoritmer

  • 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

Page 1: Datastrukturer och algoritmer

Datastrukturer och algoritmer

Föreläsning 3

Page 2: Datastrukturer och algoritmer

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

Page 3: Datastrukturer och algoritmer

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”

Page 4: Datastrukturer och algoritmer

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.

Page 5: Datastrukturer och algoritmer

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

Page 6: Datastrukturer och algoritmer

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)

Page 7: Datastrukturer och algoritmer

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

Page 8: Datastrukturer och algoritmer

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

Page 9: Datastrukturer och algoritmer

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))))

Page 10: Datastrukturer och algoritmer

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

Page 11: Datastrukturer och algoritmer

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?

Page 12: Datastrukturer och algoritmer

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

Page 13: Datastrukturer och algoritmer

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

Page 14: Datastrukturer och algoritmer

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

Page 15: Datastrukturer och algoritmer

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)

Page 16: Datastrukturer och algoritmer

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)

Page 17: Datastrukturer och algoritmer

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

Page 18: Datastrukturer och algoritmer

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

Page 19: Datastrukturer och algoritmer

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

Page 20: Datastrukturer och algoritmer

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

Page 21: Datastrukturer och algoritmer

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?

Page 22: Datastrukturer och algoritmer

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

Page 23: Datastrukturer och algoritmer

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

Page 24: Datastrukturer och algoritmer

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 <, =, >

Page 25: Datastrukturer och algoritmer

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()))

{

}

Page 26: Datastrukturer och algoritmer

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.

Page 27: Datastrukturer och algoritmer

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."