kap 02 tabeller / tabelloperasjoner
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 PresentationTRANSCRIPT
![Page 1: Kap 02 Tabeller / Tabelloperasjoner](https://reader036.vdocuments.site/reader036/viewer/2022062409/56815176550346895dbfaed4/html5/thumbnails/1.jpg)
Kap 02 Tabeller / TabelloperasjonerKap 02 Tabeller / TabelloperasjonerKap 02 Tabeller / TabelloperasjonerKap 02 Tabeller / Tabelloperasjoner
![Page 2: Kap 02 Tabeller / Tabelloperasjoner](https://reader036.vdocuments.site/reader036/viewer/2022062409/56815176550346895dbfaed4/html5/thumbnails/2.jpg)
Enkeltvariable
Les inn nedbørmengde for årets 12 måneder:
Les n1Les n2…Les n12
n1
n2
n12
![Page 3: Kap 02 Tabeller / Tabelloperasjoner](https://reader036.vdocuments.site/reader036/viewer/2022062409/56815176550346895dbfaed4/html5/thumbnails/3.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062409/56815176550346895dbfaed4/html5/thumbnails/4.jpg)
Attributter
Funksjoner
Array / Struct / Class
Array Struct Class
![Page 5: Kap 02 Tabeller / Tabelloperasjoner](https://reader036.vdocuments.site/reader036/viewer/2022062409/56815176550346895dbfaed4/html5/thumbnails/5.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062409/56815176550346895dbfaed4/html5/thumbnails/6.jpg)
Søkemetoder
- Lineær søking- Stegvis søking- Binær søking
![Page 7: Kap 02 Tabeller / Tabelloperasjoner](https://reader036.vdocuments.site/reader036/viewer/2022062409/56815176550346895dbfaed4/html5/thumbnails/7.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062409/56815176550346895dbfaed4/html5/thumbnails/8.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062409/56815176550346895dbfaed4/html5/thumbnails/9.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062409/56815176550346895dbfaed4/html5/thumbnails/10.jpg)
2
1N
Agj
Lineær søkingAntall aksesser
NAmax Maksimalt antall aksesser :
Gjennomsnittlig antall aksesser :
x
![Page 11: Kap 02 Tabeller / Tabelloperasjoner](https://reader036.vdocuments.site/reader036/viewer/2022062409/56815176550346895dbfaed4/html5/thumbnails/11.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062409/56815176550346895dbfaed4/html5/thumbnails/12.jpg)
Stegvis søkingAntall aksesser 1
xx
NAmax Maksimalt antall aksesser:
x
![Page 13: Kap 02 Tabeller / Tabelloperasjoner](https://reader036.vdocuments.site/reader036/viewer/2022062409/56815176550346895dbfaed4/html5/thumbnails/13.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062409/56815176550346895dbfaed4/html5/thumbnails/14.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062409/56815176550346895dbfaed4/html5/thumbnails/15.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062409/56815176550346895dbfaed4/html5/thumbnails/16.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062409/56815176550346895dbfaed4/html5/thumbnails/17.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062409/56815176550346895dbfaed4/html5/thumbnails/18.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062409/56815176550346895dbfaed4/html5/thumbnails/19.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062409/56815176550346895dbfaed4/html5/thumbnails/20.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062409/56815176550346895dbfaed4/html5/thumbnails/21.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062409/56815176550346895dbfaed4/html5/thumbnails/22.jpg)
Sorterings-metoder
- Boblesortering- Bucketsort- Shellsort- Quicksort- ...
![Page 23: Kap 02 Tabeller / Tabelloperasjoner](https://reader036.vdocuments.site/reader036/viewer/2022062409/56815176550346895dbfaed4/html5/thumbnails/23.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062409/56815176550346895dbfaed4/html5/thumbnails/24.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062409/56815176550346895dbfaed4/html5/thumbnails/25.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062409/56815176550346895dbfaed4/html5/thumbnails/26.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062409/56815176550346895dbfaed4/html5/thumbnails/27.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062409/56815176550346895dbfaed4/html5/thumbnails/28.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062409/56815176550346895dbfaed4/html5/thumbnails/29.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062409/56815176550346895dbfaed4/html5/thumbnails/30.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062409/56815176550346895dbfaed4/html5/thumbnails/31.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062409/56815176550346895dbfaed4/html5/thumbnails/32.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062409/56815176550346895dbfaed4/html5/thumbnails/33.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062409/56815176550346895dbfaed4/html5/thumbnails/34.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062409/56815176550346895dbfaed4/html5/thumbnails/35.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062409/56815176550346895dbfaed4/html5/thumbnails/36.jpg)
ENDENDENDEND