36
Kap 02 Tabeller / Tabelloperasjoner Kap 02 Tabeller / Tabelloperasjoner

Kap 02 Tabeller / Tabelloperasjoner

  • Upload
    yuki

  • View
    43

  • Download
    0

Embed Size (px)

DESCRIPTION

Kap 02 Tabeller / Tabelloperasjoner. Enkeltvariable. Les inn nedbørmengde for årets 12 måneder:. Les n1 Les n2 … Les n12. n1. n2. n12. Array. Les inn nedbørmengde for årets 12 måneder:. nedbor. 1. 2. nedbor[2]. FOR mnd := 1 TO 12 les nedbor[mnd] ENDFOR. 3. - PowerPoint PPT Presentation

Citation preview

Page 1: Kap 02 Tabeller / Tabelloperasjoner

Kap 02 Tabeller / TabelloperasjonerKap 02 Tabeller / TabelloperasjonerKap 02 Tabeller / TabelloperasjonerKap 02 Tabeller / Tabelloperasjoner

Page 2: Kap 02 Tabeller / Tabelloperasjoner

Enkeltvariable

Les inn nedbørmengde for årets 12 måneder:

Les n1Les n2…Les n12

n1

n2

n12

Page 3: Kap 02 Tabeller / Tabelloperasjoner

Array

Les inn nedbørmengde for årets 12 måneder:

FOR mnd := 1 TO 12les nedbor[mnd]

ENDFOR

nedbor

nedbor[2]

FOR mnd := januar TO desemberles nedbor[mnd]

ENDFOR

1

2

3

12

Page 4: Kap 02 Tabeller / Tabelloperasjoner

Attributter

Funksjoner

Array / Struct / Class

Array Struct Class

Page 5: Kap 02 Tabeller / Tabelloperasjoner

class

Behandle nedbørmengde for årets 12 måneder:

class Nebor {private:

data[12]public:

Nedbor(…)setNedbor(…)getNedbor(mnd)sum( )gjennomsnitt( )getMax( )getMin( )…

}

Page 6: Kap 02 Tabeller / Tabelloperasjoner

Søkemetoder

- Lineær søking- Stegvis søking- Binær søking

Page 7: Kap 02 Tabeller / Tabelloperasjoner

Lineær søking - Strategi

Tabellen trenger ikke være sortert.

Søker fortløpende fra begynnelsen av tabelleninntil søkt post er funneteller vi finner ut at søkt post ikke finnes.

Søkt post

x

Page 8: Kap 02 Tabeller / Tabelloperasjoner

Lineær søkingAlgoritme 1

x

LinSok (tab,max,sid)

/* Rutinen søker lineært etter gitt post i en tabell *//* og returnerer med nr = tabellposisjon til funnet post. *//* Hvis posten ikke finnes, returneres 0. *//* tab : Tabellen hvor søkingen skal foregå *//* max : Maksimalt antall elementer i tabellen *//* sid : Verdien til søkt Id */

nr := 0n := 1WHILE (nr = 0) AND (n<=max) DOIF sid = tab[n] THENnr := n

ELSEn := n + 1

ENDIFENDWHILEReturn nr

Page 9: Kap 02 Tabeller / Tabelloperasjoner

Lineær søkingAlgoritme 2

x

LinSok (tab,max,sid)

/* Rutinen søker lineært etter gitt post i en tabell *//* og returnerer med nr = tabellposisjon til funnet post. *//* Hvis posten ikke finnes, returneres 0. *//* tab : Tabellen hvor søkingen skal foregå *//* max : Maksimalt antall elementer i tabellen *//* sid : Verdien til søkt Id */

n := 1WHILE (n <= max) AND (sid <> tab[n]) DOn := n + 1

ENDWHILEIF n <= max THENnr := n

ELSEnr := 0

Return nr

Page 10: Kap 02 Tabeller / Tabelloperasjoner

2

1N

Agj

Lineær søkingAntall aksesser

NAmax Maksimalt antall aksesser :

Gjennomsnittlig antall aksesser :

x

Page 11: Kap 02 Tabeller / Tabelloperasjoner

Stegvis søking - Strategi

Tabellen må være sortert.

Søker fra begynnelsen i spranginntil vi har kommet tilstrekkelig langt.Søker eventuelt innenfor siste sprang.

Søkt post

x

Page 12: Kap 02 Tabeller / Tabelloperasjoner

Stegvis søkingAntall aksesser 1

xx

NAmax Maksimalt antall aksesser:

x

Page 13: Kap 02 Tabeller / Tabelloperasjoner

Stegvis søkingAntall aksesser 2

1222

1

2

1

x

x

NxxN

Agj

Nxx

NA

x

NA

x

N

dx

dAA

gj

gjgj

gj

02

1

20

0 2

1

2

2'

3''

2'

Nxopt

1122

Nx

x

NAgj

Gjennomsnittligantall aksesser:

Optimal steglengde:

Gjennomsnittligantall aksesserved optimal steglengde:

x

Page 14: Kap 02 Tabeller / Tabelloperasjoner

Stegvis søkingAlgoritme

x

StegSok (tab,max,sid)

/* Rutinen søker stegvis etter gitt post i en tabell *//* og returnerer med nr = tabellposisjon til funnet post. *//* Hvis posten ikke finnes, returneres 0. *//* tab : Tabellen hvor søkingen skal foregå *//* max : Maksimalt antall elementer i tabellen *//* sid : Verdien til søkt Id */

nr:=0 x:=Sqrt(max) forst:=1 sist:=max forrige:=forstWHILE (forst < sist) AND (tab[forst] < sid) DO // sprang

forrige := forst forst := minst(forst+x,sist)ENDWHILEi := forstIF sid <> tab[i] THEN i := forrige

WHILE (i < forst) AND (tab[i] < sid) DO // lineærti := i + 1

ENDWHILEENDIFIF sid = tab[i] THEN nr := iENDIFReturn nr

Page 15: Kap 02 Tabeller / Tabelloperasjoner

Binær søking - Strategi

Tabellen må være sortert.

Halverer fortløpendeog søker videre i aktuell halvdel.Søker inntil søkt post er funneteller vi kun har en post igjen.

x

Page 16: Kap 02 Tabeller / Tabelloperasjoner

Binær søkingAntall aksesser

Antall poster i tabellen : N

Etter 1 halvering har vi igjen : N/2 = N/21 posterEtter 2 halveringer har vi igjen : N/4 = N/22 posterEtter 3 halveringer har vi igjen : N/8 = N/23 poster

Etter A halveringer har vi igjen : N/2A poster

2ln

lnlog

12

2

NNA

N

max

Amax

12ln

ln1log1 2

NNAA maxgj

Maksimalt antall aksesser :

Gjennomsnittlig antall aksesser :

x

Page 17: Kap 02 Tabeller / Tabelloperasjoner

Binær søkingAlgoritme 1 x

BinSok (tab,max,sid)

/* Rutinen søker binært etter gitt post i en tabell *//* og returnerer med nr = tabellposisjon til funnet post. *//* Hvis posten ikke finnes, returneres 0. *//* tab : Tabellen hvor søkingen skal foregå *//* max : Maksimalt antall elementer i tabellen *//* sid : Verdien til søkt Id */

nr:=0 forst:=1 sist:=max mid:=(forst+sist) DIV 2WHILE (sid <> tab[mid]) AND (forst < sist) DO

IF sid < tab[mid] THEN sist := mid - 1

ELSEforst := mid + 1

ENDIFmid := (forst + sist) DIV 2

ENDWHILEIF sid = tab[mid] THEN nr := midENDIFReturn nr

Page 18: Kap 02 Tabeller / Tabelloperasjoner

Binær søkingAlgoritme 2 x

BinSok (tab,forst,sist,sid)

/*Rutinen søker binært etter gitt post i en tabell *//*og returnerer med nr = tabellposisjon til funnet post. *//*Hvis posten ikke finnes, returneres 0. *//*Søkingen er rukursiv. *//* tab : Tabellen hvor søkingen skal foregå *//* forst: Peker (indeks) til første element *//* sist: Peker (indeks) til siste element *//* sid : Verdien til søkt Id */

mid:=(forst+sist) DIV 2IF forst > sist THEN

Return 0ELSEIF sid = tab[mid] THEN

Return midELSEIF sid < tab[mid] THEN

Return BinSok(tab,forst,mid-1,sid)ELSE

Return BinSok(tab,mid+1,sist,sid)ENDIF

Page 19: Kap 02 Tabeller / Tabelloperasjoner

Søkemetoder - Oppsummering (1/2)

Lineær søking

Stegvis søking

Binær søking1

2ln

ln

NAgj

1 NAgj

2

1N

Agj

x

x

x

Page 20: Kap 02 Tabeller / Tabelloperasjoner

Søkemetoder - Oppsummering (2/2)

Lineær søking

Stegvis søking

Binær søkingx

x

x

12ln

ln

NAgj

1 NAgj

2

1N

Agj 1000000gjA

1415gjA

20gjA

N = 2 millioner

Page 21: Kap 02 Tabeller / Tabelloperasjoner

Sortering

Ofte er det ønskelig å kunne gi data-elementene en viss ordning eller struktur, dette for raskere / enklere å kunne behandle disse dataene og/eller med tanke på fremtidig anvendelse.

En form for ordning er sortering.

Page 22: Kap 02 Tabeller / Tabelloperasjoner

Sorterings-metoder

- Boblesortering- Bucketsort- Shellsort- Quicksort- ...

Page 23: Kap 02 Tabeller / Tabelloperasjoner

Boblesortering - Eksempel (1)

9

3

5

7

2

9

3

5

7

2

3

9

5

7

2

3

5

9

7

2

3

5

7

9

2

3

5

7

2

9

*

*

*

*

Page 24: Kap 02 Tabeller / Tabelloperasjoner

3

5

7

2

9

3

5

7

2

9

3

5

7

2

9

3

5

7

2

9

3

5

2

7

9

*

Boblesortering - Eksempel (2)

Page 25: Kap 02 Tabeller / Tabelloperasjoner

3

5

2

7

9

3

5

2

7

9

3

5

2

7

9

3

2

5

7

9

*

Boblesortering - Eksempel (3)

Page 26: Kap 02 Tabeller / Tabelloperasjoner

3

2

5

7

9

3

2

5

7

9

2

3

5

7

9

2

3

5

7

9

*

Boblesortering - Eksempel (4)

Page 27: Kap 02 Tabeller / Tabelloperasjoner

Boblesortering - Algoritme 1

BSort (tab,n)

/* Rutinen sorterer tabeller vha boblesortering *//* tab : Tabellen som skal sorteres *//* n : Maksimalt antall elementer i tabellen */

bytt := truej := 1WHILE bytt DObytt := falseFOR i:=1 TO n-j DOIF tab[i] > tab[i+1] THENbytt := truex := tab[i]tab[i] := tab[i+1]tab[i+1] := x

ENDIFENDFORj := j + 1

ENDWHILE

3

2

5

7

9

Page 28: Kap 02 Tabeller / Tabelloperasjoner

Boblesortering - Algoritme 2

BSort (tabId,tabDt,n)

/* Rutinen sorterer tabeller vha boblesortering *//* tabId : Tabellen som inneholder sorteringsnøkkelen *//* tabDt : Tabellen(e) som inneholder resterende data *//* n : Maksimalt antall elementer i tabellen */

bytt := truej := 1WHILE bytt DObytt := falseFOR i:=1 TO n-j DOIF tabId[i] > tabId[i+1] THENbytt := truex:=tabId[i] tabId[i]:=tabId[i+1] tabId[i+1]:= xy:=tabDt[i] tabDt[i]:=tabDt[i+1] tabDt[i+1]:= y

ENDIFENDFORj := j + 1

ENDWHILE

3

2

5

7

9

Nilsen

Olsen

Hansen

Knutsen

Persen

tabId tabDt

Page 29: Kap 02 Tabeller / Tabelloperasjoner

Boblesortering - Algoritme 3

BSort (tab,n)

/* Rutinen sorterer tabeller vha boblesortering *//* tab : Tabellen som inneholder sorteringsnøkkelen *//* n : Maksimalt antall elementer i tabellen */

bytt := truej := 1WHILE bytt DObytt := falseFOR i:=1 TO n-j DOIF tab[i].id > tab[i+1].id THENbytt := truex:=tab[i] tab[i]:= tab[i+1] tab[i+1]:= x

ENDIFENDFORj := j + 1

ENDWHILE

3

2

5

7

9

Nilsen

Olsen

Hansen

Knutsen

Persen

id dt

Page 30: Kap 02 Tabeller / Tabelloperasjoner

Ordentabeller

Ved sortering av store/mange tabeller, kan vår opprinnelige boblesorteringsmetodemedføre flytting av store datamengder.En forbedring kan utføres vha av en såkalt ordentabell.Ordentabellen leses sekvensielt forfra og indikerer i hvilken rekkefølge tabellen(e)skal leses.

Før sortering Etter sortering

NavnOrden

Alfsen

Persen

Hansen

Nilsen

4

3

2

1

NavnOrden

Alfsen

Persen

Hansen

Nilsen

3

1

2

4

Page 31: Kap 02 Tabeller / Tabelloperasjoner

Boblesortering vha ordentabell

BSort (tab,orden,n)

/* Rutinen sorterer tabeller vha boblesortering *//* tab : Tabellen som skal sorteres *//* orden : Ordentabell *//* n : Maksimalt antall elementer i tabellen */

bytt := truei := 1WHILE bytt DObytt := falseFOR i:=1 TO n-j DOIF tab[orden[i]] > tab[orden[i+1]] THENbytt := truex := orden[i]orden[i] := orden[i+1]orden[i+1] := x

ENDIFENDFORj := j + 1

ENDWHILE

NavnOrden

Alfsen

Persen

Hansen

Nilsen

4

3

2

1

NavnOrden

Alfsen

Persen

Hansen

Nilsen

3

1

2

4

Page 32: Kap 02 Tabeller / Tabelloperasjoner

Innsetting / Sletting i tabeller

2

3

7

9

4

2

3

4

7

9

2

3

7

9

2

7

9

Innsetting

Sletting

Page 33: Kap 02 Tabeller / Tabelloperasjoner

Innsetting i tabell - Algoritme

Innsett (tab,max,n,nyPost,pos,flag)

/*Rutinen setter inn ny post i en tabell *//* tab : Tabellen hvor ny post skal innsettes *//* max : Maksimalt antall plasser i tabellen tab *//* n : Første ledige posisjon i tabellen tab *//* nyPost : Ny post som skal innsettes *//* pos : Posisjon i tab hvor ny post skal innsettes *//* flag : Returnerer true hvis innsetting ok */

IF n > max THENflag := false

ELSEflag:= truei := n - 1WHILE i >= pos DO

tab[i+1] := tab[i]i := i - 1

ENDWHILEtab[pos] := nyPostn := n + 1

ENDIF

Page 34: Kap 02 Tabeller / Tabelloperasjoner

Sletting i tabell - Algoritme

Slett (tab,n,pos)

/* Rutinen sletter en post i en tabell *//* tab : Tabellen hvor post skal slettes *//* n : Første ledige posisjon i tabellen tab *//* pos : Posisjon i tab hvor post skal slettes */

i := posWHILE i < n-1 DO tab[i] := tab[i+1]i := i + 1

ENDWHILEn := n - 1

Page 35: Kap 02 Tabeller / Tabelloperasjoner

Henting i tabell - Algoritme

Hent (tab,n,pos,post)

/* Rutinen henter og sletter en post i en tabell *//* tab : Tabellen hvor post skal slettes *//* n : Første ledige posisjon i tabellen tab *//* pos : Posisjon i tab hvor post skal slettes *//* post : Returnerer med post som skal slettes */

post := tab[pos]Slett(tab,n,pos)

Page 36: Kap 02 Tabeller / Tabelloperasjoner

ENDENDENDEND