Laste ned presentasjonen
Presentasjon lastes. Vennligst vent
1
Klargjøring fra forrige gang
f(n): Det antall elementære operasjoner vi kommer fram til i algoritmen g(n): En eller annen referansefunksjon, gjerne n, n2, nlogn eller liknende O: Verste fall, mest mulig arbeid (for eksempel i if-setninger) Ω: Beste fall, minst mulig arbeid Θ: Både verste og beste kan uttrykkes med samme g
2
Eksempel: Har funnet ut at vår algoritme i verste fall utføres 2n2+8n+3 ganger og i beste fall n2/2 + 5n + 3 ganger Verste fall: Siden 2n2+8n+3 <= 4n2 når n>=5 har vi f(n)єO(n2) Beste fall: Siden n2/2 + 5n + 3 >= n2/2 når n>=0, har vi f(n)єΩ(n2) Siden g(n)=n2 for begge tilfeller, får vi f(n)єΘ(n2)
3
Programmeringsteknikk der en metode kaller seg selv
Rekursjon Programmeringsteknikk der en metode kaller seg selv
4
Eksempel: Fakultet n! = n * (n-1)! og 1! = 1 5! = 5 * 4! 4! = 4 * 3!
3! = 3 * 2! 2! = 2 * 1! 1! = 1 2! = 2 * 1 = 2 3! = 3 * 2 = 6 4! = 4 * 6 = 24 5! = 5 * 24 = 120
5
Oppbygging En basis – enkelt tilfelle som kan beregnes/utføres direkte (1! = 1) Et rekursjonstrinn der problemet splittes i et eller flere ny(e) problem(er) av samme type, men enklere enn det opprinnelige (n! = n * (n-1)! ) Enklere betyr i denne sammenhengen nærmere basis (n-1 er nærmere 1 enn n er)
6
Tenkemåte Anta at vi har løst problemet for de(t) enklere problemet/ene. Ikke tenk på hvordan dette skal løses! Bruk løsningen til å løse det opprinnelige problemet. Husk å sette opp løsningen for basis. Se algoritme 2.1 side 23
7
Alternativ: iterasjon
Rekursjon krever mye ressurser under kjøring Hvis det er like enkelt å lage ei løkke, ikke bruk rekursjon! Rekursjon brukes når det er mye mer komplisert å programmere ikke-rekursivt
8
Et eksempel der rekursjon er beste løsning: Tårnet i Hanoi
Har n ringer som skal flyttes fra en pinne til en annen. Har en tredje pinne som kan brukes til mellomlagring underveis Alle ringene har forskjellig størrelse. Ingen ring får ligge over en mindre ring Bare en ring får flyttes om gangen
9
Tårnet i Hanoi med 5 ringer
B C Start Flytt ringene fra A til C ved hjelp av B
10
Tårnet i Hanoi med 5 ringer
Ikke-rekursiv tankegang A B C Start A B C Flytt en og en ring
11
Tårnet i Hanoi med 5 ringer
Rekursiv tankegang A B C Start A B C Flytt 4 ringer til B
12
Tårnet i Hanoi med 5 ringer
Rekursiv tankegang A B C Start A B C Flytt 4 ringer til B A B C Flytt største ring på plass
13
Tårnet i Hanoi med 5 ringer
Rekursiv tankegang A B C Start A B C Flytt 4 ringer til B A B C Flytt største ring på plass A B C Flytt de 4 minste på plass
14
Finn summen av n tall
15
Finn summen av n tall Løsning 1: Summen av n tall er summen av de n-1 første tallene pluss det siste
16
Finn summen av n tall Løsning 1: Summen av n tall er summen av de n-1 første tallene pluss det siste Løsning 2: Summen av n tall er summen av de n/2 første pluss summen av de n/2 siste
17
Finn summen av n tall Løsning 1: Summen av n tall er summen av de n-1 første tallene pluss det siste Løsning 2: Summen av n tall er summen av de n/2 første pluss summen av de n/2 siste Løsning 3: Summen av n tall er summen av de n/2 tallene vi får når vi summerer to og to av dem
18
Finn summen av n tall Løsning 1: Summen av n tall er summen av de n-1 første tallene pluss det siste Løsning 2: Summen av n tall er summen av de n/2 første pluss summen av de n/2 siste Løsning 3: Summen av n tall er summen av de n/2 tallene vi får når vi summerer to og to av dem Se algoritme 2.6 side 32
19
Finn en bestemt verdi i en sortert tabell - binærsøkealgoritmen
Sjekk midterste element Hvis det er det vi leter etter, er vi ferdige Hvis det vi leter etter er mindre, let videre i første halvdel Hvis det vi leter etter er større, let videre i andre halvdel Fortsett til vi enten finner det vi leter etter, eller vi ikke har flere plasser å lete Eks: Finn 8 i tabellen 0, 2, 4, 5, 6, 8, 9, 13, 17
20
Kompleksitetsberegninger for rekursive algoritmer
Fakultetsalgoritmen: T(n) = T(n-1) + 1 Tårnet i Hanoi: T(n) = 2T(n-1) + 1 Summasjonsalgoritmene Løsning 1: T(n) = T(n-1) + 1 Løsning 2: T(n) = 2T(n/2) + 1 Løsning 3: T(n) = T(n/2) + n/2 Binærsøkealgoritmen: T(n) = T(n/2) + 1
21
Generell regel Gjelder når vi har uttrykk på formen T(n) = aT(n/b) + cnk Hvis bk < a vil T(n) є Θ(nlogba) Hvis bk = a vil T(n) є Θ(nklogn) Hvis bk > a vil T(n) є Θ(nk)
22
Oppgaver 2.1-2 side 28 2.2-7 side 39 2.1 side 45
Liknende presentasjoner
© 2024 SlidePlayer.no Inc.
All rights reserved.