• No results found

Datastrukturer och algoritmer

N/A
N/A
Protected

Academic year: 2022

Share "Datastrukturer och algoritmer"

Copied!
5
0
0

Loading.... (view fulltext now)

Full text

(1)

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)

(2)

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

(3)

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

(4)

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

(5)

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

References

Related documents

2845.. Ett av nedanstående alternativ är det rätta värdet. a) Ange en följd av 10 konsekutiva positiva heltal som inte inne- håller något primtal... b) Visa att för varje

Allt obehörigt begagnande av ritningen beivras enligt lag.. TRAFIKVERKET Denna ritning är

[r]

Show that the intersection of arbitrary many compacts sets in a metric space X is

Man använder dubbelintegralens definition för att härleda formler inom matematik, fysik och tekniska tillämpningar, men själva beräkningen utför man oftast genom upprepad

Lösningsförslag: Bollen träffar marken då y t 0, så svaret på båda frågorna. D

En sportbilstillverkare begränsar prestandan för en av modellerna genom att vid full gas styra bränsletillförseln så att accelerationen i varje ögonblick är proportionell

Egmont Porten Höst 2013/2014