1.5 Rekurrenser — iterasjon, substitusjon og splitt-og-hersk
Iterasjonsmetoden for **eksakte** svar, substitusjonsmetoden for induksjonsverifikasjon, og splitt-og-hersk-paradigmet (binærsøk) som gir rekurrensene.
splitt-og-hersk-analyse i 12 av 17 (71 %). Grunnlaget er de 17 settene fra
august 2015 til august 2023 som er gjennomgått tema for tema — det er nevneren
hver gang boka oppgir en prosent.
Sjangeren er den samme som i kap. 1.4:
- Sjanger B — rekurrensløsning med navngitt metode, altså at du sier
hvilken metode du bruker og oppgir svaret på den formen oppgaven ber om. Det
siste er avgjørende: iterasjon gir et eksakt uttrykk, masterteoremet gir
en asymptotisk grense. Blander du de to formene, svarer du på feil spørsmål.
Høyeste prioritet — dette må sitte for iterasjon og substitusjon.
Splitt-og-hersk som designidé er ett hakk lavere: bør sitte.
Det du skal kunne skille mellom etter dette kapitlet:
| Oppgaven sier | Metode | Svarform |
|---|---|---|
| «finn et eksakt uttrykk» | iterasjon | et lukket uttrykk, for eksempel |
| «vis at » | substitusjon | induksjonssteget ført ferdig |
| «løs rekurrensen» på -form | masterteoremet | med tilfellet oppgitt |
| «hvor mange nivåer?» | rekursjonstreet |
Slik er kapitlet lagt opp (55 min):
| Innhold | Tid |
|---|---|
| Iterasjonsmetoden og de eksakte svarene | ca. 18 min |
| Substitusjonsmetoden | ca. 15 min |
| Splitt og hersk, og binærsøk | ca. 16 min |
| Antall nivåer, og hvilken metode når | ca. 6 min |
Forkunnskaper
- kap. 1.4 — masterteoremet. Dette sto der: en rekurrens
på formen løses ved å sammenligne med
, og tilfelle 2 gjelder når
med . Teoremet gir alltid et asymptotisk svar. Dette kapitlet
handler om de to metodene som tar over der teoremet ikke rekker.
- kap. 1.1 — de asymptotiske symbolene, og at
.
Summeformler brukes i hvert eneste iterasjonssvar. Er de ustøe:
Rekker og summasjon for , og
Geometriske følger og rekker for
.
Induksjon er hele substitusjonsmetoden. Grundig gjennomgang:
Induksjonsbevis. Mykere første møte:
Induksjon.
Er rekursjon som ferdighet fersk, er
Rekursjon — spore og skrive et godt sted å begynne, og
Søking: sekvensielt søk og binærsøk viser binærsøket i
kode før vi analyserer det her.
Iterasjonsmetoden og de eksakte svarene (~18 min)
Masterteoremet er raskt, men det kan bare to ting: kjenne igjen formen
, og gi et asymptotisk svar. Kommer oppgaven med en rekurrens
der størrelsen krymper ved subtraksjon — —
faller den utenfor. Og ber oppgaven om et eksakt uttrykk, er masterteoremet
ubrukelig uansett form.
Da bruker du iterasjonsmetoden: du setter rekurrensen inn i seg selv
gjentatte ganger, ser mønsteret, og summerer.
og igjen, til mønsteret er tydelig, og deretter summere leddene.
Framgangsmåten har fire steg: (1) skriv ut de tre–fire første innsettingene,
(2) skriv opp det generelle leddet etter innsettinger, (3) finn hvilken
som treffer grunntilfellet, og (4) summer.
Metoden gir et eksakt uttrykk, ikke en asymptotisk grense — og det er
nettopp derfor den etterspørres. Svarer du der oppgaven ba om et
eksakt uttrykk, har du ikke svart på spørsmålet.
Løs med grunntilfellet . Finn et eksakt
uttrykk for .
Intuisjon: hver innsetting flytter oss ett hakk nedover og etterlater ett
ledd på gulvet. Leddene som blir liggende igjen, er nettopp tallene ,
, og så videre.
Steg 2 — det generelle leddet. Etter innsettinger:
Intuisjon: argumentet er sunket med , og vi har samlet opp de største
tallene opp til .
Steg 3 — treff grunntilfellet. Vi vil ha , altså . Da
blir
Intuisjon: iterasjonen stopper når argumentet når bunnen. Er
grunntilfellet , bidrar det ingenting til summen.
Steg 4 — summer.
Svaret oppgaven ber om: .
Kontroll: , , — og rekurrensen gir
, , . Stemmer.
Merk hva som skjer hvis oppgaven i stedet ba om en asymptotisk grense. Da
er svaret , og det er en helt annen svarform. Les spørsmålet.
(Innstegsoppgave, sjanger B — rekurrensløsning med navngitt metode, altså at du
sier hvilken metode du bruker og oppgir svaret på riktig form.)
Løs med . Finn et eksakt uttrykk.
Løs med . Finn et eksakt uttrykk.
Intuisjon: leddene som blir liggende igjen, er potenser av 2 — og de
halveres for hvert hakk nedover.
Steg 2 — det generelle leddet. Etter innsettinger:
Steg 3 — treff grunntilfellet. Med får vi , og summen
blir alle potensene fra til .
Steg 4 — summer den geometriske rekken.
Intuisjon: summen av alle potenser opp til er nøyaktig én mindre
enn den neste potensen — det er den geometriske rekken med kvotient 2.
Svaret oppgaven ber om: .
Kontroll: , , , . Rekurrensen gir
, , , .
Stemmer.
Asymptotisk er dette — men det var ikke det oppgaven spurte om.
Løs med . Finn et eksakt uttrykk, og navngi
metoden.
En rutine kaller seg selv på et array som er to elementer kortere, og gjør
enheter arbeid i hvert kall: for like , med .
Finn et eksakt uttrykk for like .
Substitusjonsmetoden (~15 min)
Den andre metoden svarer på et annet spørsmål. Iterasjon finner et svar;
substitusjon verifiserer et svar du allerede har gjettet.
Det høres bakvendt ut, men det er en fullverdig bevismetode — og det er den
oppgaven ber om når den sier «vis at ».
svaret, og bevis det ved induksjon.
Induksjonsbeviset har to deler: grunntilfellet (påstanden holder for de
minste -ene, med en passende konstant), og induksjonssteget (antar du at
påstanden holder for alle mindre argumenter, følger den for ).
Det er induksjonssteget som gir uttelling. Å gjette riktig uten å føre
steget, er et halvt svar.
alle , gitt rekurrensen .
Induksjonshypotesen: anta at påstanden holder for alle argumenter mindre
enn , spesielt for :
Steget:
Intuisjon: vi har byttet ut det vi ikke kjenner, , med det
hypotesen lover om det. Det er hele trikset.
Intuisjon: logaritmeregelen gjør at det faller ut et
helt ledd . Det leddet er reserven vår.
Intuisjon: vi er i mål så snart reserven er minst like stor som det
ekstra arbeidet på dette nivået.
Grunntilfellet: for er . Med konstant kan
vi velge stor nok til at . Merk at
ikke duger som grunntilfelle: , og .
Konklusjon: .
Numerisk kontroll: for og er for alle
fra 2 til 4999 — sjekket ved å regne ut begge sider.
Vis ved substitusjon at gir .
Før induksjonssteget ferdig.
En kandidat vil vise at gir , og skriver:
«Anta . Da er .»
Er beviset gyldig? Svar ja eller nei, og forklar nøyaktig hvor det svikter.
Splitt og hersk, og binærsøk (~16 min)
Rekurrensene kommer ikke fra ingenting. De kommer fra en bestemt måte å bygge
algoritmer på, og den er verdt å ha et navn på.
samme type, delene løses rekursivt, og delløsningene settes sammen til et
svar på det opprinnelige problemet.
De tre stegene heter del, hersk og kombiner. Kjøretiden blir en
rekurrens , der er antall delkall, er hvor mye
inputen krymper, og er del- og kombinasjonsarbeidet.
Delproblemene overlapper ikke — hvert delproblem løses nøyaktig én gang.
Det er dette som skiller teknikken fra dynamisk programmering, der de samme
delproblemene dukker opp igjen og igjen.
A[1..n], indeks fra 1, og det ersortert stigende. Rutinen er skrevet iterativt med to grenser
lo og hi;den rekursive varianten gjør nøyaktig det samme.
Prebetingelse: A[1..n] er sortert.
Postbetingelse: rutinen returnerer en indeks i med A[i] = v hvis v
finnes i arrayet, og NIL ellers.
Bisect(A, v)
Input: sortert array A[1..n] og en verdi v
Output: en indeks i med A[i] = v, ellers NIL
lo = 1
hi = A.length
while lo <= hi
mid = floor((lo + hi) / 2)
if A[mid] == v
return mid
else if A[mid] < v
lo = mid + 1
else
hi = mid - 1
return NIL
Kjoeretid: Theta(lg n) versteInvarianten i én setning: hvis v finnes i arrayet, ligger den iA[lo..hi].
Kjøretid: hver runde halverer intervallet, og arbeidet per runde er
konstant, altså
Her er og , så , og treffer tilfelle 2 med . Svaret blir
.
Numerisk kontroll: verste antall runder er nøyaktig
— kontrollert for alle fra 1 til 1999 ved å
regne ut den dypeste stien i søket.
Legg merke til at bare ÉN av de to halvdelene besøkes. Det er derfor
, og det er derfor binærsøk er logaritmisk mens Merge-Sort, som må
inn i begge halvdelene, er .
For hver av de tre: sett opp rekurrensen og løs den. Oppgi metoden.
a) Binærsøk i et sortert array: én halvdel besøkes, konstant arbeid per
nivå.
b) Merge-Sort: begge halvdelene besøkes, lineær fletting.
c) En rutine som deler inputen i fire like deler, løser alle fire
rekursivt, og bruker lineær tid på å sette sammen.
Metode: masterteoremet. , , , og
— tilfelle 2 med .
b) .
Metode: masterteoremet. , , , og
— tilfelle 2 med .
c) .
Metode: masterteoremet. , , , og
— tilfelle 2 med .
Det som er verdt å legge merke til: b) og c) gir samme svar. Å dele i fire
i stedet for to endrer bare konstanten, ikke veksten. Det som virkelig
skiller a) fra de to andre, er at a) besøker én del i stedet for alle — og
det ser du på , ikke på .
Svarformen på eksamen: rekurrensen, metodenavnet, tilfellet og svaret. Fire
korte linjer per deloppgave.
En rutine deler inputen i to halvdeler, går rekursivt inn i begge, og
bruker på å kombinere.
a) Sett opp rekurrensen.
b) Løs den med masterteoremet, og oppgi tilfellet.
Et sortert array A[1..n] inneholder forskjellige heltall, som kan
være både negative og positive. Du skal avgjøre om det finnes en indeks
med A[i] = i, og i så fall oppgi en slik indeks.
Beskriv en algoritme som bruker tid.
Antall nivåer, og hvilken metode når (~6 min)
Et fast delspørsmål er «hvor mange nivåer har rekursjonstreet?» — eller, i
noen formuleringer, «hvor mange ganger kalles rutinen på hverandre før den
stopper?»
Dybden i rekursjonstreet til er :
det er hvor mange ganger kan deles på før du er nede på en konstant.
Tallet avhenger bare av , ikke av . Antall delkall styrer hvor
bredt treet blir — antall løvnoder er — men ikke hvor dypt.
For rekurrenser som krymper ved subtraksjon er dybden i stedet
: trenger nivåer for å komme ned.
For hver rekurrens: hvor mange nivåer har rekursjonstreet, og hvilken metode
ville du valgt for å løse den?
a)
b)
c)
Den første koster hele oppgaven.
- Å oppgi en asymptotisk grense der oppgaven ber om et eksakt svar. Ber
oppgaven om «et eksakt uttrykk», er feil svar selv om det er
sant. Riktig er . Motsatt: ber den om en asymptotisk grense, skal
du ikke bruke plass på det eksakte uttrykket.
- Å teleskopere med feil grunntilfelle. Iterasjonen stopper når argumentet
treffer grunntilfellet, og grunntilfellets verdi skal med i det eksakte
uttrykket. Med i stedet for blir svaret et annet.
- Å gjette riktig i substitusjon uten å føre induksjonssteget. Gjetningen
er ikke beviset. Uttellingen ligger i steget der hypotesen settes inn og
restleddet håndteres.
- Å ende induksjonssteget på feil form. Kommer du fram til når du
antok , har du ikke vist påstanden — konstanten har vokst. Dette er
den vanligste substitusjonsfeilen.
- Å bruke masterteoremet der formen ikke passer. er
ikke på formen . Å si høyt at teoremet ikke gjelder, gir
uttelling; å tvinge det på, gir et svar som ser riktig ut og er galt. Dette
er felle #5 — feil bruk av masterteoremet.
- Å tro at splitt-og-hersk-delproblemer overlapper. De gjør ikke det. Hvert
delproblem løses nøyaktig én gang, og derfor hjelper det ikke å lagre svar.
Overlappende delproblemer er kjennetegnet på dynamisk programmering.
Og den gjennomgående: å ikke navngi metoden. Sjanger B ber eksplisitt om
metoden, og navnet er ett ord.
Metodevalget samlet
| Rekurrensens form | Oppgaven ber om | Metode | Svarform |
|---|---|---|---|
| asymptotisk grense | masterteoremet | + tilfellet | |
| asymptotisk eller eksakt | iterasjon | lukket uttrykk, evt. | |
| hvilken som helst | «finn et eksakt uttrykk» | iterasjon | lukket uttrykk |
| hvilken som helst | «vis at » | substitusjon | induksjonssteget ført ferdig |
| hvilken som helst | «hvor mange nivåer?» | rekursjonstreet | eller |
De faste summene du trenger:
Den siste er grunnen til at blir og
ikke : arbeidet halveres nedover, og summen konvergerer.
Begrepsbank
Begrepsbanken er flashcard- og repetisjonsstoff — den gjentar det du nettopp
har lest. Hopp trygt over ved førstegangslesing; tidsanslaget for kapitlet
gjelder kjernestoffet.
løser en rekurrens ved gjentatt innsetting i seg selv, til mønsteret er
tydelig, og summerer så leddene.
Gir et eksakt uttrykk, ikke en asymptotisk grense.
Krever at grunntilfellet tas med — det er en del av det eksakte svaret.
navnet på at leddene i en iterasjon legger seg på rad slik at summen kan skrives
i lukket form.
teleskoperer til .
Kjenn igjen summen — er det den aritmetiske eller den geometriske? Det er
det eneste regnetrikset metoden krever.
gjett svaret, og bevis det ved induksjon.
Består av grunntilfelle og induksjonssteg; det er steget som gir uttelling.
Induksjonssteget må ende på nøyaktig den formen du antok. Blir det et
restledd igjen, er gjetningen for optimistisk.
antagelsen om at påstanden holder for alle argumenter mindre enn .
I substitusjon settes den inn i rekurrensen der det ukjente -uttrykket står.
Det er hele trikset: bytt ut det du ikke kjenner med det hypotesen lover om
det.
designteknikken del, hersk og kombiner: problemet deles i mindre deler av samme
type, delene løses rekursivt, og delløsningene settes sammen.
Gir rekurrensen .
Delproblemene overlapper ikke — hvert løses nøyaktig én gang. Det skiller
teknikken fra dynamisk programmering.
søker etter en verdi i et sortert array ved å halvere søkeintervallet i
hver runde.
Kjøretid i verste tilfelle; verste antall runder er
.
Krever at arrayet er sortert. Det er den eneste forutsetningen — og uten
den er svaret verdiløst.
binærsøkets rekurrens: ett rekursivt kall på halve inputen, konstant arbeid per
nivå.
Løsning , ved masterteoremets tilfelle 2 med .
Merk : bare én av de to halvdelene besøkes, og det er det som gjør
søket logaritmisk.
den vanligste subtraksjonsrekurrensen: argumentet krymper med 1, arbeidet er
lineært.
Eksakt løsning med ; asymptotisk .
Masterteoremet gjelder ikke — formen er ikke .
dobling i hvert steg: koeffisienten foran dobles for hvert hakk nedover.
Eksakt løsning med ; asymptotisk .
Eksponentiell vekst kommer av kombinert med subtraksjon — ikke av
arbeidet per steg, som her bare er 1.
Dukker opp hver gang en iterasjon legger til et ledd som vokser lineært.
Asymptotisk — men i et eksakt svar skal hele brøken stå.
for .
Med kvotient under 1 konvergerer summen: .
Den konvergente varianten er grunnen til at halverende arbeid gir lineær
total, ikke .
.
Avhenger bare av hvor mye argumentet krymper, ikke av antall delkall.
Antall løvnoder er derimot , og der teller .
verdien rekursjonen stopper på, typisk eller .
For asymptotiske svar antas for en konstant , og den
oppgitte verdien betyr som regel ingenting.
For eksakte svar betyr den alt — den er et ledd i uttrykket.
et eksakt uttrykk gir verdien til for hver ; en asymptotisk
grense gir bare vekstklassen.
er eksakt; er asymptotisk.
Les oppgaveteksten: ordet «eksakt» eller «lukket uttrykk» styrer hvilken av
de to som er riktig svar.
å bruke masterteoremet på en rekurrens som ikke er på formen
, eller å velge feil tilfelle.
Typisk: å tvinge teoremet på , eller å glemme
logaritmefaktoren i tilfelle 2.
Å påpeke at teoremet ikke gjelder, gir uttelling. Å bruke det likevel gir
et svar som ser riktig ut og er galt.
oppgavetypen der du får en rekurrens og skal løse den.
Svarformen er metodens navn pluss svaret på riktig form — asymptotisk eller
eksakt — og for masterteoremet også hvilket tilfelle.
Metodenavnet er ett ord, og det er en del av det som gir uttelling.
Dette kapitlet er skrevet av Anthropics toppmodeller (Claude Opus og Claude Fable) og er foreløpig ikke manuelt gjennomgått — kvalitetskontrollen gjøres av uavhengige KI-agenter, og innmeldte feil rettes fortløpende. Funnet en feil? Meld fra, så retter vi den. Les mer om hvordan innholdet lages.
Skolesaga er en uavhengig læringsressurs og er ikke tilknyttet eller godkjent av Norges teknisk-naturvitenskapelige universitet. Dette er ikke offisielt studiemateriell. Les mer.