Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

Kap 02 Tabeller / Tabelloperasjoner. Enkeltvariable Les inn nedbørmengde for årets 12 måneder: Les n1 Les n2 … Les n12 n1 n2 n12.

Liknende presentasjoner


Presentasjon om: "Kap 02 Tabeller / Tabelloperasjoner. Enkeltvariable Les inn nedbørmengde for årets 12 måneder: Les n1 Les n2 … Les n12 n1 n2 n12."— Utskrift av presentasjonen:

1 Kap 02 Tabeller / Tabelloperasjoner

2 Enkeltvariable Les inn nedbørmengde for årets 12 måneder: Les n1 Les n2 … Les n12 n1 n2 n12

3 Array Les inn nedbørmengde for årets 12 måneder: FOR mnd := 1 TO 12 les nedbor[mnd] ENDFOR nedbor nedbor[2] FOR mnd := januar TO desember les nedbor[mnd] ENDFOR 1 2 3 12

4 Attributter Funksjoner Array / Struct / Class ArrayStructClass

5 class Behandle nedbørmengde for årets 12 måneder: class Nebor { private: data[12] public: Nedbor(…) setNedbor(…) getNedbor(mnd) sum( ) gjennomsnitt( ) getMax( ) getMin( ) … }

6 Søkemetoder - Lineær søking -Stegvis søking -Binær søking

7 Lineær søking - Strategi Tabellen trenger ikke være sortert. Søker fortløpende fra begynnelsen av tabellen inntil søkt post er funnet eller vi finner ut at søkt post ikke finnes. Søkt post

8 Lineær søking Algoritme 1 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:=0 n :=1 WHILE (nr = 0) AND (n<=max) DO IF sid = tab[n]THEN nr:=n ELSE n:=n + 1 ENDIF ENDWHILE Return nr

9 Lineær søking Algoritme 2 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 :=1 WHILE (n tab[n]) DO n:=n + 1 ENDWHILE IF n <= max THEN nr := n ELSE nr := 0 Return nr

10 Lineær søking Antall aksesser Maksimalt antall aksesser: Gjennomsnittlig antall aksesser:

11 Stegvis søking - Strategi Tabellen må være sortert. Søker fra begynnelsen i sprang inntil vi har kommet tilstrekkelig langt. Søker eventuelt innenfor siste sprang. Søkt post

12 Stegvis søking Antall aksesser 1 Maksimalt antall aksesser:

13 Stegvis søking Antall aksesser 2 Gjennomsnittlig antall aksesser: Optimal steglengde: Gjennomsnittlig antall aksesser ved optimal steglengde:

14 Stegvis søking Algoritme 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:=forst WHILE (forst < sist) AND (tab[forst] < sid) DO// sprang forrige:= forst forst:= minst(forst+x,sist) ENDWHILE i := forst IF sid <> tab[i] THEN i := forrige WHILE (i < forst) AND (tab[i] < sid) DO// lineært i := i + 1 ENDWHILE ENDIF IF sid = tab[i] THEN nr := i ENDIF Return nr

15 Binær søking - Strategi Tabellen må være sortert. Halverer fortløpende og søker videre i aktuell halvdel. Søker inntil søkt post er funnet eller vi kun har en post igjen.

16 Binær søking Antall aksesser Antall poster i tabellen:N Etter 1 halvering har vi igjen :N/2 =N/2 1 poster Etter 2 halveringerhar vi igjen :N/4 =N/2 2 poster Etter 3 halveringerhar vi igjen :N/8 =N/2 3 poster Etter Ahalveringer har vi igjen :N/2 A poster Maksimalt antall aksesser: Gjennomsnittlig antall aksesser:

17 Binær søking Algoritme 1 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 2 WHILE (sid <> tab[mid]) AND (forst < sist) DO IF sid < tab[mid] THEN sist := mid - 1 ELSE forst := mid + 1 ENDIF mid := (forst + sist) DIV 2 ENDWHILE IF sid = tab[mid] THEN nr := mid ENDIF Return nr

18 Binær søking Algoritme 2 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 2 IF forst > sist THEN Return 0 ELSEIF sid = tab[mid] THEN Return mid ELSEIF sid < tab[mid] THEN Return BinSok(tab,forst,mid-1,sid) ELSE Return BinSok(tab,mid+1,sist,sid) ENDIF

19 Søkemetoder - Oppsummering (1/2) Lineær søking Stegvis søking Binær søking

20 Søkemetoder - Oppsummering (2/2) Lineær søking Stegvis søking Binær søking N = 2 millioner

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

22 Sorterings-metoder - Boblesortering -Bucketsort -Shellsort - Quicksort -...

23 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 * * * *

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

25 3 5 2 7 9 3 5 2 7 9 3 5 2 7 9 3 2 5 7 9 * Boblesortering - Eksempel (3)

26 3 2 5 7 9 3 2 5 7 9 2 3 5 7 9 2 3 5 7 9 * Boblesortering - Eksempel (4)

27 Boblesortering - Algoritme 1 BSort (tab,n) /*Rutinen sorterer tabeller vha boblesortering*/ /*tab:Tabellen som skal sorteres*/ /*n:Maksimalt antall elementer i tabellen*/ bytt:= true j:= 1 WHILE bytt DO bytt := false FOR i:=1 TO n-j DO IF tab[i] > tab[i+1] THEN bytt:=true x:=tab[i] tab[i]:=tab[i+1] tab[i+1]:=x ENDIF ENDFOR j := j + 1 ENDWHILE 3 2 5 7 9

28 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:= true j:= 1 WHILE bytt DO bytt := false FOR i:=1 TO n-j DO IF tabId[i] > tabId[i+1] THEN bytt := true x:=tabId[i] tabId[i]:=tabId[i+1] tabId[i+1]:= x y:=tabDt[i] tabDt[i]:=tabDt[i+1] tabDt[i+1]:= y ENDIF ENDFOR j := j + 1 ENDWHILE 3 2 5 7 9 Nilsen Olsen Hansen Knutsen Persen tabIdtabDt

29 Boblesortering - Algoritme 3 BSort (tab,n) /*Rutinen sorterer tabeller vha boblesortering*/ /*tab:Tabellen som inneholder sorteringsnøkkelen*/ /*n:Maksimalt antall elementer i tabellen*/ bytt:= true j:= 1 WHILE bytt DO bytt := false FOR i:=1 TO n-j DO IF tab[i].id > tab[i+1].id THEN bytt := true x:=tab[i] tab[i]:=tab[i+1] tab[i+1]:= x ENDIF ENDFOR j := j + 1 ENDWHILE 3 2 5 7 9 Nilsen Olsen Hansen Knutsen Persen iddt

30 Ordentabeller Ved sortering av store/mange tabeller, kan vår opprinnelige boblesorteringsmetode medfø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 sorteringEtter sortering

31 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:= true i:= 1 WHILE bytt DO bytt := false FOR i:=1 TO n-j DO IF tab[orden[i]] > tab[orden[i+1]] THEN bytt:=true x:=orden[i] orden[i]:=orden[i+1] orden[i+1]:=x ENDIF ENDFOR j := j + 1 ENDWHILE

32 Innsetting / Sletting i tabeller 2 3 7 9 4 2 3 4 7 9 2 3 7 9 2 7 9 Innsetting Sletting

33 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 THEN flag := false ELSE flag:= true i:= n - 1 WHILE i >= pos DO tab[i+1]:= tab[i] i:= i - 1 ENDWHILE tab[pos]:= nyPost n := n + 1 ENDIF

34 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 := pos WHILE i < n-1 DO tab[i]:= tab[i+1] i:= i + 1 ENDWHILE n := n - 1

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

36 ENDEND


Laste ned ppt "Kap 02 Tabeller / Tabelloperasjoner. Enkeltvariable Les inn nedbørmengde for årets 12 måneder: Les n1 Les n2 … Les n12 n1 n2 n12."

Liknende presentasjoner


Annonser fra Google