Upload
yuki
View
43
Download
0
Tags:
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
Kap 02 Tabeller / TabelloperasjonerKap 02 Tabeller / TabelloperasjonerKap 02 Tabeller / TabelloperasjonerKap 02 Tabeller / Tabelloperasjoner
Enkeltvariable
Les inn nedbørmengde for årets 12 måneder:
Les n1Les n2…Les n12
n1
n2
n12
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
Attributter
Funksjoner
Array / Struct / Class
Array Struct Class
class
Behandle nedbørmengde for årets 12 måneder:
class Nebor {private:
data[12]public:
Nedbor(…)setNedbor(…)getNedbor(mnd)sum( )gjennomsnitt( )getMax( )getMin( )…
}
Søkemetoder
- Lineær søking- Stegvis søking- Binær søking
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
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
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
2
1N
Agj
Lineær søkingAntall aksesser
NAmax Maksimalt antall aksesser :
Gjennomsnittlig antall aksesser :
x
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
Stegvis søkingAntall aksesser 1
xx
NAmax Maksimalt antall aksesser:
x
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
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
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
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
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
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
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
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
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.
Sorterings-metoder
- Boblesortering- Bucketsort- Shellsort- Quicksort- ...
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
*
*
*
*
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)
3
5
2
7
9
3
5
2
7
9
3
5
2
7
9
3
2
5
7
9
*
Boblesortering - Eksempel (3)
3
2
5
7
9
3
2
5
7
9
2
3
5
7
9
2
3
5
7
9
*
Boblesortering - Eksempel (4)
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
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
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
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
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
Innsetting / Sletting i tabeller
2
3
7
9
4
2
3
4
7
9
2
3
7
9
2
7
9
Innsetting
Sletting
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
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
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)
ENDENDENDEND